Özellik adları değişkenlerde olduğunda neden isset()
çalışmıyor?isset() dinamik özellik adları ile
object(stdClass)#39 (1) {
["tst"]=>
array(2) {
["one"]=>
int(1)
["two"]=>
int(2)
}
}
bool(true)
bool(false) // was expecting true here..
Düzenleme:: koduyla etrafında oynuyor devam etti ve
var_dump($Object->$tst['one']);
Duyurusu çıkışı öğrendim:
$Object = new stdClass();
$Object->tst = array('one' => 1, 'two' => 2);
$tst = 'tst'; $one = 'one';
var_dump($Object, isset($Object->tst['one']), isset($Object->$tst[ $one ]));
aşağıdaki verir
E_NOTICE: Undefined property: stdClass::$t
Yani, sorun şu ki, $tst[...]
bölümünün 'dize modunda' değerlendirildiğini (dizedeki ilk karaktere göre değerlendirmek; bu durumda "t"), nesnenin nesneden alınmasına gitmeden önce;
var_dump($tst, $tst['one']); // string(3) "tst" string(1) "t"
Çözüm:
var_dump($Object->{$tst}['one']); // int(1) yay!
: onun
değeri ilk almak için tercümana anlatmak için, değişken adı (
$this->{$tst}
) etrafında parantez koymak ve sonra
[...]
bölümünü değerlendirmektir
Kötü 'isset() 'için böyle zalim şeyler yapıyor musunuz? Sana hiç ne yaptı? (Cidden olsa da, iyi bir soru, ben şaşırdım!) –
'var_dump ($ Object -> $ tst)' ne gösteriyor? – CodeCaster
Sorun, burada yalnızca operatör önceliğidir. özellik olarak değişkene bağlı olarak [] 'over' ->. – mario