empty()
dinamik nesne özellikleri için başvuran zaman garip / non-sezgisel davranış yaşıyorum PHP 5.3 kullanarak __get()
aşırı fonksiyonu üzerinden alındı. Aşağıdaki kod parçasını inceleyin:
<?php
class Test {
protected $_data= array(
'id'=> 23,
'name'=> 'my string'
);
function __get($k) {
return $this->_data[$k];
}
}
$test= new Test();
var_dump("Accessing directly:");
var_dump($test->name);
var_dump($test->id);
var_dump(empty($test->name));
var_dump(empty($test->id));
var_dump("Accessing after variable assignment:");
$name= $test->name;
$id= $test->id;
var_dump($name);
var_dump($id);
var_dump(empty($name));
var_dump(empty($id));
?>
Bu fonksiyonun çıktısı aşağıdaki gibidir. Birinci ve ikinci sonuç kümeleri üzerinde empty()
çeklerin sonuçları karşılaştırın:
Set # 1, beklenmedik sonuç:
string(19) "Accessing directly:"
string(9) "my string"
int(23)
bool(true)
bool(true)
Set # 2 ile aynı dönmek için Set # 1 bekliyor:
string(36) "Accessing after variable assignment:"
string(9) "my string"
int(23)
bool(false)
bool(false)
Bu gerçekten şaşırtıcı ve non-sezgisel. Boş olmayan dizeler çıktı ama empty()
nesne özellikleri bunları boş dizeleri olarak değerlendirmektedir. Burada neler oluyor?