首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将对象求值为布尔值

将对象求值为布尔值
EN

Stack Overflow用户
提问于 2011-04-07 04:57:36
回答 5查看 10.4K关注 0票数 24

请考虑以下几点:

代码语言:javascript
复制
class MyClass
{
  private $var1 = "apple";
  private $var2 = "orange";
}

$obj = new MyClass();

if($obj) { 
  // do this
}
else {
  // do that
}

PHP将我的对象求值为true,因为它有成员变量。这个逻辑能以某种方式被覆盖吗?换句话说,当我的类的对象被视为布尔值时,我能控制它的计算结果吗?

EN

回答 5

Stack Overflow用户

发布于 2011-04-07 05:11:55

您能做的最好的事情就是使用__invoke

代码语言:javascript
复制
class MyObject {

    private $_state;

    public function __construct($state = false) {
        $this->_state = $state;
    }

    public function __invoke() {
        return $this->_state;
    }

}

$true  = new MyObject(true);
$false = new MyObject(false);

var_dump($true());   // true
var_dump($false());  // false
票数 20
EN

Stack Overflow用户

发布于 2011-04-07 05:04:02

不,你不能。不幸的是,php中的布尔型转换是不可修改的,当一个对象转换成布尔型时,它总是会返回true。

既然您显然有一些要放在控制语句中逻辑,为什么不在对象上定义一个方法(比如"isValid()“)来检查您想要检查的条件,然后替换:

代码语言:javascript
复制
if ($obj)

通过以下方式:

代码语言:javascript
复制
if ($obj->isValid())
票数 7
EN

Stack Overflow用户

发布于 2016-09-14 22:44:04

您可以对php7使用小的扩展名:https://github.com/p1ncet/obcast。正如您可以从描述中看到的,它允许通过实现新的内部接口Boolable将对象强制转换为boolean:

代码语言:javascript
复制
$obj = new class implements Boolable {
    public $container = [];
    public function __toBoolean() {
        return count($this->container) > 0;
    }
};

var_dump((bool) $obj);

$obj->container = [1];
var_dump((bool) $obj);

输出:

代码语言:javascript
复制
bool(false)
bool(true)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5572849

复制
相关文章

相似问题

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