虽然我理解静态方法可以通过各种方法调用,例如:
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();
答案 0 :(得分:0)
::
运算符用于引用非实例类。这意味着您引用了static
方法或变量,或const
。 static
方法的标志是它们无法与您的实例一起使用。它们本质上是独立的函数,不能使用$this
来引用您的类的实例。
因此,您不能通过引用实例来引用静态方法。你需要使用
self::function();
或
$this->function();
虽然后者使它看起来可能是实例的一部分,但它仅为完整性而包含在内。