当我遇到一段奇怪的代码时,我正在读一本关于PHP的书:
class Employee {
public function show() {
echo "show launched\n";
}
}
Employee::show();
我来自C ++所以我打赌这个代码不起作用。这就是我测试它的原因。
它有效,显示“show launch”(omg,我喝醉了吗?)!
似乎打破了这样一个概念,即没有类的实例化就可以调用类的方法。
提前致谢。
增加: 只是一个通知。
我在book中找到了。 第178-179页,它是作为正确的例子给出的(如果我是对的)
答案 0 :(得分:11)
是的,这会起作用,但会发出警告。您可能已经关闭了PHP上的error reporting
...
严格的标准:非静态方法Employee :: show()不应该 静态呼叫
在函数定义之前添加static
关键字会使警告消失。
下面的代码无需警告即可运行..
<?php
class Employee {
public static function show() { //<----- Added the static keyword.
echo "show launched\n";
}
}
Employee::show();
似乎打破了可以调用类方法的概念 没有实例化的类。
是的,这是正确的,这就是为什么你得到一个非常明确的警告,正如我之前向你展示的那样。你知道什么是警告吗? )。不应该做的事情。
来自PHP文档..
静态调用非静态方法会生成E_STRICT级别 警告。
答案 1 :(得分:1)
它在php版本上有不同的行为。 PHP 4没有静态关键字(在函数声明上下文中),但仍然允许使用::静态调用方法。为了向后兼容的目的,这在PHP 5中继续。
然而,随着PHP 5对象模型的更改 - 引入了static关键字。 然后,自 PHP 5.1.3 以来,您可以获得有关以下内容的严格标准警告:
Strict Standards: Non-static method Employee::show() should not be called statically in ...
答案 2 :(得分:1)
我认为这取决于您使用的php版本。此功能在新的php版本中已弃用,将在以后的版本中删除。
这不起作用,使用最新的php版本时会出错。
我使用的是PHP 5.5.9-1 + sury.org~precision + 1(cli)(内置:2014年2月13日15:53:53)
如果打开错误并按原样放置代码。
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
class Employee {
public function show() {
echo "show launched\n";
}
}
Employee::show();
?>
这是我收到的错误消息。
**Strict Standards: Non-static method Employee::show() should not be called statically in /var/www/test/index.php on line 19
show launched**
答案 3 :(得分:0)
Code Works你会得到一个警告
严格的标准:非静态方法不应该静态调用Employee :: show()
只需在public static function show()