考虑此示例,
class A {
public function who() {
echo 'The name of the class is ' . __CLASS__;
}
}
A::who();
输出:该类的名称为A
还有,
class A {
public $vars=12;
}
echo A::$vars;
会导致以下错误,
致命错误:未捕获错误:访问未声明的静态属性: A :: $ var在G:\ xampp \ htdocs \ Learn_PHP \ PHP1 \ name_class.php:10堆栈中 跟踪:抛出#0 {main} G:\ xampp \ htdocs \ Learn_PHP \ PHP1 \ name_class.php在第10行
发生了什么事?为什么可以通过类访问公共方法? 为何财产不会发生同样的事情?
答案 0 :(得分:1)
从php.net页上的“范围解析运算符”:
范围解析运算符(也称为Paamayim Nekudotayim),或更简单地说,是双冒号,是一种令牌,可以访问类的静态,常量和重写属性或方法。
您的函数是一种方法,因此可以使用::
。但是,变量不是静态的或常量的,也不是父类的重写属性。因此,::
的使用将无效。
文档中的整页:https://secure.php.net/manual/en/language.oop5.paamayim-nekudotayim.php
答案 1 :(得分:0)
要使第二个示例像第一个示例一样工作,只需将其更改如下
class A {
public static $vars=12;
}
echo A::$vars;
通过将“静态”添加到属性,因为您是以静态方式调用它的。
实际上,从第一个示例开始,PHP允许以静态方式调用静态方法,但不允许静态变量。
根据文档,此行为将在PHP 7中更改
警告在PHP 7中,不建议静态调用非静态方法, 并会生成E_DEPRECATED警告。支持通话 将来可能会删除静态的非静态方法。
请查看此URL Static keyword in PHP