因此在PHP 5.4及更高版本中,您可以像这样调用实例化方法。
$class = new Foo()->methodName();
我想检查是否在实例化该类时同时使用了一个方法。
是否可以检查是否在没有方法的情况下同时实例化了该类,如果没有,则默认为方法吗?
答案 0 :(得分:0)
您可以在要检查其类的对象上使用instanceOf。
答案 1 :(得分:-1)
该类的构造函数无法在php中返回值,因此您不能使用封装在构造函数中的单例,并且看起来不错。当然,你可以做这样的事情
// NOT FOR USE
class Foo {
private static $instance;
public function __construct($skipIncapsulate = false) {
if (!$skipIncapsulation && !self::$instance)
{
self::instance = new self(true);
}
}
public function bar() {
// Do what you want with self::$instance
}
}
不要使用上面的示例,这是一个丑陋的解决方案,它还会在控制器中以及使用类时封装不必要的逻辑
最好使用像这样的单例
class Foo {
private static $instance;
private function __construct()
{}
public static getInstance()
{
return self::$instance ?? self::$instance = new self();
}
}
尽管如此,您仍然可以创建一个new class FooManager
,如果定义了Foo
类,它将委托该
class FooManager {
private static $foo;
public function __construct()
{
self::$foo = self::$foo ?? self::$foo = new Foo();
}
public function getFoo()
{
return self::$foo;
}
}
// usage in your code
(new FooManager)->getFoo()->bar();
// You can add __call method to use (new FooManager)->foo->bar()
这将简化代码的使用。在构造函数中封装静态自实例不是一个好习惯