当我遇到一段奇怪的代码时,我正在阅读一本关于 PHP 的书:
class Employee {
public function show() {
echo "show launched\n";
}
}
Employee::show();
我来自 C++,所以我敢打赌这段代码行不通。这就是我测试它的原因。
它成功了,显示“show launched”(天哪,我喝醉了吗?)!
这似乎打破了类的方法可以在不实例化类的情况下被调用的概念。
- 那么类中的静态标识符有什么意义呢?
- 所有公共(public)函数也是静态的吗?真的,我错过了什么?
提前致谢。
添加: 只是一个通知。
我发现在这个book . 第 178-179 页,它是作为正确示例给出的(如果我是对的)
最佳答案
是的,这会起作用,但有一个警告。您可能关闭了 error reporting
顺便说一句,在 PHP 上...
Strict standards: Non-static method Employee::show() should not be called statically
在函数定义之前添加一个 static
关键字会使警告消失。
下面的代码在没有警告的情况下工作..
<?php
class Employee {
public static function show() { //<----- Added the static keyword.
echo "show launched\n";
}
}
Employee::show();
回答你的问题...
It seems to be breaking the concept that method of class can be called without instantiation of class.
是的,这是正确的,这就是为什么您会收到我之前向您展示的非常明确的警告。你知道警告的作用是什么吗? ;).不该做的事。
来自 PHP 文档..
Calling non-static methods statically generates an E_STRICT level warning.
关于PHP 公共(public)函数的行为类似于静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246640/