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