2011-09-06 30 views
3

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

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

使用这个类:

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

,但其可能的,我们称之为foo功能不会产生任何情况下,仅使用::。例如下面的代码被写出课外,并且运行良好:

a::foo(); 

它为什么会工作?如何?

+2

它被称为'范围分辨率运算符':http://us3.php.net/manual/en/language.oop5.paamayim-nekudotayim.php –

+0

*(相关)* [这个符号在PHP中的含义是什么] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon

回答

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

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

+0

如何使用范围解析运算符访问属性? – Novice

4

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