PHP函数类方法混乱

PHP函数类方法混乱,php,class,function,Php,Class,Function,我目前正在处理一些遗留代码,偶然发现了一个奇怪的类/函数调用,php.net似乎无法解释,我以前从未见过: if(security::instance()->check_client()) { 有一个类安全性,该类中有名为instance和check_client的函数。但这似乎在一个语句中调用了两个函数,并将其中一个传递给另一个,或者至少结果表明了这一点。 有人能帮我澄清一下吗?执行过程如下: 首先,执行security类的instance() 它返回安全性类的实例(最有可能) 然后

我目前正在处理一些遗留代码,偶然发现了一个奇怪的类/函数调用,php.net似乎无法解释,我以前从未见过:

if(security::instance()->check_client()) {
有一个类安全性,该类中有名为instance和check_client的函数。但这似乎在一个语句中调用了两个函数,并将其中一个传递给另一个,或者至少结果表明了这一点。
有人能帮我澄清一下吗?

执行过程如下:

  • 首先,执行
    security
    类的
    instance()
  • 它返回
    安全性
    类的实例(最有可能)
  • 然后,对返回的对象执行
    check\u client
    方法
因此,由于
security::instance()
是一个对象,因此可以对其调用方法

安全性:实例()

是静态调用(因此可能是静态方法)

它返回某个类的实例,该类具有成员方法check\u client()

因此,它返回一个对象,然后您可以调用该对象上的任何公共方法。

我只能假设(因为我不知道底层代码),但它可能会向您解释它

首先,函数可以返回对象。然后对返回的对象调用对象函数:

security::instance()->check_client()
这是一样的:

$securityInstance = security::instance();
$securityInstance->check_client();

其次,通过命名
实例
,我假设
security::instance()
返回安全类的实例,可能是基于应用程序配置的单例实现或工厂

我想您的类
安全性
如下所示:

class security {
    private static $instance = null;

    private function __construct() {}        

    public static function instance() {
        if (null === self::$instance)
            self::$instance = new security();

        return self::$instance;
    }

    public function check_client() { /* do something */ }
}
它所做的是,静态方法实例返回一个类security的实例;这意味着
security::instance()instanceof security===true

这就是为什么您可以像示例中那样将调用链接到check_client()方法

security::instance()->check_client()
这类似于

$secu = security::instance();
$secu->check_client();

您如何知道它返回安全类的实例?:)这只是一个猜测,根据OPs声明,代码中存在一个方法
check\u client
。(用于静态函数)在中进行了解释。您好,Alfwed,非常感谢您的详细解释。