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

时间:2014-05-26 14:11:16

标签: php oop static static-methods static-functions

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

A::staticFunction();

OR

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

OR

$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解析错误:

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

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

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

1 个答案:

答案 0 :(得分:0)

::运算符用于引用非实例类。这意味着您引用了static方法或变量,或conststatic方法的标志是它们无法与您的实例一起使用。它们本质上是独立的函数,不能使用$this来引用您的类的实例。

因此,您不能通过引用实例来引用静态方法。你需要使用

self::function();

$this->function();

虽然后者使它看起来可能是实例的一部分,但它仅为完整性而包含在内。