Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;::&引用;在php中,调用非静态函数在类外工作_Php - Fatal编程技术网

&引用;::&引用;在php中,调用非静态函数在类外工作

&引用;::&引用;在php中,调用非静态函数在类外工作,php,Php,据我所知,:用于调用子类中的静态函数和基类函数。据我所知,通常我们必须创建一个类的实例,以便在类外使用它 class a { public function foo() { // } } 要使用此类,请执行以下操作: $instance = new a(); $instance->foo(); 但是我们可能调用foo函数,而不创建任何实例,并且只使用:。例如,以下代码是在课堂外编写的,运行良好: a::foo(); 它为什么有效?怎么做 使用C

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

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


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

它被称为
范围解析运算符
:(相关)如何使用范围解析运算符访问属性?