Açıklama belirttiği gibi, I, bağımsız değişken olarak bir dizi ve bir nesne alır ve nesnenin türüne bağlı olarak, dizideki ilgili değerlerine nesnelerin tüm alanları atar bir işlevi vardır. Nesneler farklı alanlar var, ama hepsi işlev atamak için hangi alanları belirlemek için kullandığı bir tür nitelik.
Bu gibi bir şey çalışır:
function unload($arr,&$obj){ <-- //&$obj not $obj
if($obj->type == 'A'){
echo 'Setting field for A';
$obj->a = $arr['a_value'];
//some more assignments..
}
elseif($obj->type == 'B'){
$obj->b = $arr['b_value'];
echo 'Setting field for B';
//some more assignments...
}
//some more elseifs
//return an error if
//object's type doesn't
//match
else{
echo 'Error: Object type '.$obj->type.' not recognized.';
}
}
$arr['a_value'] = 'SomeValue';
$arr['b_value'] = 'SomeOtherValue';
$obj = new A(); //A's type set to 'A' upon initialization
unload($arr,$obj);
echo 'A->a set to: '.$obj->a;
Output: A->a set to:
Kod geçirilen ancak nesnenin alanlarının hiçbiri atanmış olsun nesne için doğru şube girer. Ben yanlış ne yapıyorum?
Sunucu PHP 4.4.7 çalışıyor, ben hala bu neden ne hiçbir fikrim yok.
Düzenleme: Ben nihayet bu 2 şey bir arada oldu, bunu anladım:
Ben sınıf içinde sınıf alan adlarını başvururken $this
anahtar kelime gerekli olduğunu fark etmedi. Ben değişkenler Java olduğu gibi pek $this
isteğe bağlı olduğu küresel kapsamı vardı üstlendi. Sadece işlevi bildirimi değiştirerek sorunu çözmek vermedi nedeni budur. Şimdi her şey çalışıyor!