请考虑以下几点:
class MyClass
{
private $var1 = "apple";
private $var2 = "orange";
}
$obj = new MyClass();
if($obj) {
// do this
}
else {
// do that
}
PHP将我的对象求值为true,因为它有成员变量。这个逻辑能以某种方式被覆盖吗?换句话说,当我的类的对象被视为布尔值时,我能控制它的计算结果吗?
发布于 2011-04-07 05:11:55
您能做的最好的事情就是使用__invoke
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
发布于 2011-04-07 05:04:02
不,你不能。不幸的是,php中的布尔型转换是不可修改的,当一个对象转换成布尔型时,它总是会返回true。
既然您显然有一些要放在控制语句中逻辑,为什么不在对象上定义一个方法(比如"isValid()“)来检查您想要检查的条件,然后替换:
if ($obj)
通过以下方式:
if ($obj->isValid())
发布于 2016-09-14 22:44:04
您可以对php7使用小的扩展名:https://github.com/p1ncet/obcast。正如您可以从描述中看到的,它允许通过实现新的内部接口Boolable将对象强制转换为boolean:
$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);
输出:
bool(false)
bool(true)
https://stackoverflow.com/questions/5572849
复制相似问题