据我所知,::
用于在子类中调用静态函数和基类函数。据我所知,通常我们需要创建一个类的实例以便在类外使用它。
class a
{
public function foo()
{
//
}
}
:
$instance = new a();
$instance->foo();
,但有可能我们调用foo
函数而不创建任何实例,只使用::
。例如,下面的代码是在类外编写的,运行良好:
a::foo();
为什么它工作?以及如何?
使用Class::method()
语法调用非静态方法会调用该方法,但如果它试图访问$this
则会引发错误。它本质上是PHP4(非常小的)面向对象编程实现的延续,它将在PHP5中生成警告;从面向对象的角度来看,这不是正确的行为,您不应该依赖它。
::
是作用域解析操作符。
来自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;
?>
类似于->
,但是有一些特殊的语义