忽略不存在的方法


ignore non existing method

所以假设您有一个singleton模式或其他模式:

class Smth{  
  public static function Foo(){
    static $instance;
    if(!condition()) return false; // <-- it's nothing...
    if(!($instance instanceof FooClass)) $instance = new FooClass();
    return $instance; // <-- it's a object and has that method
  }
}

因此,如果我在满足condition()时调用Smth::foo()->A_foo_method(),那么该方法就会执行,一切都正常

但如果不满足condition(),显然我会得到一个致命的错误,告诉我Smth::foo()不是一个对象等等…

我怎么能简单地忽略第二种情况呢。?我的意思是什么都不要做,也不要表现出致命的错误。

(除了在类外检查condition()之外,在调用方法时)

您不想这样做这是一次无声的失败,这不是一件好事。当您调用一个方法时,您希望它做一些事情(尤其是Singleton模式中类似getInstance的方法,它应该返回一个实例)。因此,是的,在调用A_foo_method()之前,您必须检查foo()是否返回了一个实际对象。相反,静默失败可能会造成调试混乱。

看看特殊情况模式。

这是因为您正在从Smth::foo()返回false。这应该返回Foo的实例,以便的其余部分可以运行。

我认为您正在进行Foo的延迟加载。看看下面对DB对象执行相同操作的简单示例,看看它是否可以扩展。

private static $dbh;
public static function DBC() {
    if (self::$dbh === null) {
        self::$dbh = new mysqli($mysql['host'], $mysql['un'], $mysql['pw'], $mysql['db']);
    }
    return self::$dbh;
}