可以实现empty()的对象处理

tey*_*non 3 php interface is-empty

我知道我们可以实现PHP的可数接口来确定函数count()的工作方式以及使用像数组这样的对象的Iterator接口.

是否可以实现某种接口(或任何其他方式)来更改对象上的empty()行为?

从本质上讲,这是我希望能够做到的:

<?php
class test {
    function __empty() {
        if (count($this->data) > 0) {
            return false;
        }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

真是个不错的选择!

Sho*_*hoe 5

不,那里没有.迭代器行为和计数行为对对象没有意义; 这就是你可以覆盖它们的原因.empty()应用于对象的默认行为具有含义:它是对象的实例还是NULL?; 这就是你无法覆盖它的原因.

你可以改为:

  • 在被调用的对象中创建一个方法isEmpty()并在那里实现它
  • 创建一个全局函数emptyObj()并在那里实现它


Shi*_*dim 4

不,PHP 没有它。您可以在wiki.php.net上请求此类功能。与此同时,您可以自己推出。

interface Empty_Checkable{
   function isempty();
}

class test implements Empty_Checkable{
    function isempty() {
        if (count($this->data) > 0) {
            return false;
        }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)