“::“在PHP中,调用非静态函数在类外工作


"::" in php for calling non-static functions works out of class

据我所知,::用于在子类中调用静态函数和基类函数。据我所知,通常我们需要创建一个类的实例以便在类外使用它。

class a 
{
    public function foo()
    {
       //
    }
}

:

$instance = new a();
$instance->foo();

,但有可能我们调用foo函数而不创建任何实例,只使用::。例如,下面的代码是在类外编写的,运行良好:

a::foo();

为什么它工作?以及如何?

使用Class::method()语法调用非静态方法会调用该方法,但如果它试图访问$this则会引发错误。它本质上是PHP4(非常小的)面向对象编程实现的延续,它将在PHP5中生成警告;从面向对象的角度来看,这不是正确的行为,您不应该依赖它。

::是作用域解析操作符。

http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

来自PHP的文档:

<?php
class MyClass {
    const CONST_VALUE = 'A constant value';
}
$classname = 'MyClass';
echo $classname::CONST_VALUE; // As of PHP 5.3.0
echo MyClass::CONST_VALUE;
?>

类似于->,但是有一些特殊的语义