Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对象中的自动函数';谁的目标?_Php_Php 5.3 - Fatal编程技术网

Php 对象中的自动函数';谁的目标?

Php 对象中的自动函数';谁的目标?,php,php-5.3,Php,Php 5.3,以这一类为例: class Test { public $obj; function __construct ($obj) { $this->obj = $obj; } $obj有自己的公共功能。我通过我的代码将其称为$t=newtest($obj)$t->obj->do() 我希望允许$obj为空,而不会触发错误。如果没有显式设置函数,是否可以使用PHP的神奇函数执行一些技巧来始终返回false?另外,是否有PHP

以这一类为例:


class Test {  
    public $obj;  

function __construct ($obj) {  
    $this->obj = $obj;  
}  
$obj有自己的公共功能。我通过我的代码将其称为
$t=newtest($obj)$t->obj->do()


我希望允许$obj为空,而不会触发错误。如果没有显式设置函数,是否可以使用PHP的神奇函数执行一些技巧来始终返回false?另外,是否有PHP<5.3的解决方案?

我现在无法测试,但这可以工作:

class default {
      public function __call($name, $arguments) {
             return false;
      }
}

class Test {
      public $obj;
      public function __construct($obj = NULL) {
           if($obj === NULL) $this->obj = new default;
           else $this->obj = $obj
      }
}

这个对象是什么类的,或者它可以实现什么接口?类型暗示在这里可能很有用。在我的例子中,它是PEAR的PHP_调试类,但Adam的解决方案是通用的,工作良好!可能需要选择一个不同的名称,
default
是一个PHP关键字。当然,这只是一个示例,使用一些名称空间(如Test\u default)将是一个好主意,您可以尝试向测试类添加\u call(),并在默认情况下在$obj中创建它的实例,但这对于大型类来说会有问题,您将无法使用\u call()为其他目的