首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php魔术方法和空

Php魔术方法和空
EN

Stack Overflow用户
提问于 2010-09-17 20:29:45
回答 4查看 828关注 0票数 3

具有以下代码

代码语言:javascript
复制
class test {
    private $name;
    public function __get($name){
        return $name;
    }
    public function __set($name,$value){
        $this->name = $value;
    }
}
$obj = new test();
$obj->a = 2;

if (!empty($obj->a)) {
    echo 'not empty';
}

我是__isset。但是这没有被定义,所以它总是返回空。检查非空属性的最佳方法是什么?

更新:更改类不是一个解决方案,因为它是第三方组件,它必须保持不变。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-17 21:41:30

如果不能更改类,我认为唯一可能的解决方法是使用临时变量。

代码语言:javascript
复制
$obj->a = 2;

$test = $obj->a; 

if (!empty($test)) {
    echo 'not empty';
}
票数 3
EN

Stack Overflow用户

发布于 2012-12-27 21:52:06

我知道我来得太晚了,但我把这篇文章贴出来是为了给那些遇到这个问题的人一个启发。

首先,我认为测试类是错误的,如果这真的是第三方组件所做的,我会把它扔掉,因为它是垃圾。您真的希望所有属性名称都在内部映射到单个属性'name',从而覆盖彼此吗?您真的希望所有属性名都作为属性值返回吗?代码的应该如下所示:

代码语言:javascript
复制
class test {
    public function __get($name){
        return $this->$name;
    }
    public function __set($name,$value){
        $this->$name = $value;
    }
}

其次,您可以对类进行更改,即使它必须保持不变。这就是继承的要点。这是open-closed principle。如果函数不正确,只需像这样扩展test来更正它们:

代码语言:javascript
复制
class test {
    private $name;
    public function __get($name){
        return $name;
    }
    public function __set($name,$value){
        $this->name = $value;
    }
}

class my_test extends test
{
    public function __get($name)
    {
        return $this->$name;
    }

    public function __set($name,$value){
        $this->$name = $value;
    }
}

您不应该定义__isset(),因为校正后的代码将执行它应该执行的操作,但是如果您这样做了,您也可以在这里执行此操作。

现在,下面的代码将做它应该做的事情(注意类名的更改):

代码语言:javascript
复制
$obj = new my_test();
$obj->a = 2;

if (!empty($obj->a)) {
    echo 'not empty';
}
票数 1
EN

Stack Overflow用户

发布于 2010-09-17 20:35:48

当与除变量以外的任何变量一起使用时,它没有意义;例如,空(addslashes ($ name))没有意义,因为它将被除变量之外的任何其他变量检查为值为FALSE的变量。

在您的例子中,您应该使用类型转换:

if ((bool)$obj->a) { echo‘非空’;}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3735295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档