使用PHP的神奇功能的其他功能里面不起作用

问题描述:

我想用神奇的功能__set()__get()用于存储PHP5类中的SQL数据和我使用它们的函数里面得到一些奇怪的问题:使用PHP的神奇功能的其他功能里面不起作用

作品:

if (!isset($this->sPrimaryKey) || !isset($this->sTable)) 
return false; 
$id = $this->{$this->sPrimaryKey}; 
if (empty($id)) 
return false; 
echo 'yaay!'; 

不起作用:

if (!isset($this->sPrimaryKey) || !isset($this->sTable)) 
    return false; 
if (empty($this->{$this->sPrimaryKey})) 
    return false; 
echo 'yaay!'; 

这会是一个PHP错误?

empty()第一个*调用__isset()方法,并且只在它返回true时返回__get()方法。即你的类也必须实现__isset()。

E.g.

<?php 
class Foo { 

    public function __isset($name) { 
    echo "Foo:__isset($name) invoked\n"; 

    return 'bar'===$name; 
    } 

    public function __get($name) { 
    echo "Foo:__get($name) invoked\n"; 
    return 'lalala'; 
    } 
} 

$foo = new Foo; 
var_dump(empty($foo->dummy)); 
var_dump(empty($foo->bar)); 

打印

Foo:__isset(dummy) invoked 
bool(true) 
Foo:__isset(bar) invoked 
Foo:__get(bar) invoked 
bool(false) 

*编辑:如果它不能 “直接” 找对象的属性哈希表的访问性能。

+0

作品!谢谢!! :D – Sirber 2010-04-15 14:10:58

+0

PHP4提供'__isset'吗? – 2010-04-15 14:18:26

+0

@理查德:不。 '5.1.0 \t增加__isset()和__unset()。' – Sirber 2010-04-15 14:21:07