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