我有奇怪的問題與魔術吸氣劑/ isset。 我有myObject的定義神奇的getter/isset:奇怪的PHP魔法吸氣劑陣列
private $_data = array();
public function __get($name) {
if (array_key_exists($name, $this->_data)) return $this->_data[$name];
throw new Exception($name.': property doesn\'t exist.');
}
public function __isset($name) {
return isset($this->_data[$name]);
}
如果我稱之爲:
isset($myObject->notExisting);
empty($myObject->notExisting);
我有正確的行爲(__isset()被調用),而如果我打電話:
isset($myObject->notExisting['ok']));
empty($myObject->notExisting['ok']));
__get()是__get()時不調用__isset()。
這對我來說似乎很奇怪,因爲PHP在嘗試獲取它之前應該首先檢查$ myObject-> notExisting exists,不是嗎?
謝謝你們,你們的答案對我來說都很好 –