PHP:使用object属性访问静态函数/方法


PHP: Access static function / method with object property

虽然我知道静态方法可以通过各种方法调用,例如:

A::staticFunction();

$class = 'A';
$class::staticFunction();

$a = new A(); // Assume class has been defined elsewhere
$a->staticFunction();

然而,谁能解释一下为什么以下不能工作,如果可能的话,如何使它工作(不诉诸提供的解决方案):

// Assume object $b has been defined & instantiated elsewhere
$b->funcName::staticFunction(); // Where funcName contains the string 'A'

生成以下PHP解析错误:

解析错误:语法错误,unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)

典型的工作解决方案(遵循第二种方法)(如果可能的话最好避免):

// Assume object $b has been defined & instantiated elsewhere
$funcName = $b->funcName; // Where funcName contains the string 'A'
$funcName::staticFunction();

::操作符用于引用非实例化类。这意味着您引用static方法或变量,或conststatic方法的特点是它们不能与您的实例一起工作。它们本质上是独立的函数,不能使用$this来引用回你的类的实例。

因此,您不能通过引用实例来引用静态方法。你需要使用
self::function();

$this->function();

虽然后者使它看起来像是实例的一部分,但它只是为了完整性而包含在其中。