用于调用非静态函数的php中的“::”适用于类

时间:2011-09-06 04:04:15

标签: php

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

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

使用此类:

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

但我们可能会调用foo函数而不创建任何实例,只能使用::。例如,下面的代码是在课外编写的,效果很好:

a::foo();

为什么会有效?如何?

2 个答案:

答案 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;
?>

它就像->,但有一些特殊的语义。