Aslında C# ve PHP dilinin birbirlerine karşı hem avantajları hem de dezavantajları var. Bunun en büyük sebeplerinden biri PHP’nin yorumlanan bir dil olması olurken, C#’ın derlenen bir dil olmasıdır. Yorumlanan bir dilin dinamiklik olarak kendince birçok avantajı varken, derlenen bir dilin de hız başta olmak üzere kendine has avantajları vardır.
Neyse başlıktaki konuya dönecek olursak ilk başta C# dilini ele alalım:
class Parent
{
public string val = "Parent";
public void getValue()
{
Console.WriteLine(this.val);
}
}
class Child:Parent
{
public string val = "Child";
}
Child child = new Child();
child.getValue(); //ekrana Parent yazacak.
child.getvalue(); ‘daki değer Parent şeklinde olacak.
override yapmayacak. Yapması için kodu aşağıdaki gibi değiştirirsem:
class Parent{
public virtual string val
{
get { return "Parent"; }
}
public void getValue()
{
Console.WriteLine(this.val);
}
}
class Child:Parent
{
public override string val // override ile metodu değiştireceğimi söylüyorum.
{
get { return "Child"; }
}
}
Çıktı Child şeklinde olacak. Yani override işlemi başarıyla gerçekleşecek.
İşte burada PHP’deki davranış biraz daha farklı. C# gibi override keyword yok. Lafı dolandırmadan aşağıdaki örneği inceleyerek PHP’de nasıl override yapıldığını görelim:
class ParentClass {
public $val = 'parent';
public function foo()
{
echo $this->val;
}
}
class ChildClass extends ParentClass { //childclass'ı parentclass'tan türetiyorum.
public $val = 'child'; //ve aynı ismi kullanarak başka değer atadığımda
// direkt override yapmış oluyor.
//metodun ismini -parametre varsa- parametreleri aynı //olacak şekilde tekrar tanımlayıp iç kısmını override
//yaparak değiştirebilirim.
public function foo()
{
echo $this->val.'içini değiştirdim';
}
}
$a = new ChildClass();
$a->foo();
Çıktı child olacak. Aynı değişkeni Parent‘ten türettiğim childclass içinde kullandığımda direkt override olmuş oluyor.
Aynı şekilde metodu, parametreleri aynı olacak şekilde child class içerisinde tekrar tanımlayıp içerisini değiştirerek override yapmış oluyorum.
Etiketler: