Açıklamada belirtildiği gibi, bir diziyi ve bir nesneyi argüman olarak alan bir işleve sahibim ve nesnenin türüne bağlı olarak tüm nesne alanlarını dizideki ilgili değerlerine atar. Nesnelerin hepsinin farklı alanları vardır, ancak bunların hepsinin, hangi alanların atanacağını belirlemek için kullandığı bir tür özniteliği vardır. nesnenin alanlarınHer iki işleve de geçerken PHP sınıf alanlarının dizi değerlerine atanması alanları ayarlamaz, neden?
kod geçirilen nesne için doğru şube girer ama hiçbiri:
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;
Çıktı: A-> kümesi için
Böyle bir şey çalışır atandı Neyi yanlış yapıyorum?
Sunucu, PHP 4.4.7 çalıştırıyor, bunun nedenini hala bilmiyorum.
Düzenleme: sınıf içinde sınıf alan adlarını başvururken
Ben $this
kelime gerekliydi fark etmedi: Ben nihayet anladım, bu 2 şeylerin bir arada oldu. Değişkenlerin global kapsamı olduğunu varsaydım, bu yüzden $this
Java'da olduğu gibi isteğe bağlıydı. Bu yüzden sadece işlev bildirimini değiştirmek sorunu çözmedi. Şimdi her şey iyi çalışıyor!
Nesnede 'private' var mı? – alex
herhangi bir abanoz hatası göremiyor ... basit bir test vakası oluşturabilir ve sorunuza dahil edebilir misiniz? 'Instanceof' işlevini kullanabileceğiniz bir -> tip işlevinden ziyade (örneğin,' '($ obj instanceof SomeClass) {...' – Hamish
@Hamish Evet, bu işe yarayacaktır, ancak 'type' özelliği * bir şey olabilir. hangi sınıfın alakasız olduğu – alex