PHP公共函数的行为类似于静态函数
我在读一本关于PHP的书时,遇到了一段奇怪的代码:PHP公共函数的行为类似于静态函数,php,function,oop,static,Php,Function,Oop,Static,我在读一本关于PHP的书时,遇到了一段奇怪的代码: class Employee { public function show() { echo "show launched\n"; } } Employee::show(); 我是C++的,所以我敢打赌这个代码不行。这就是我测试它的原因 它成功了,展示了“表演启动”(天哪,我喝醉了吗?) 这似乎打破了不用实例化类就可以调用类的方法的概念 那么,类中静态标识符的意义是
class Employee {
public function show() {
echo "show launched\n";
}
}
Employee::show();
我是C++的,所以我敢打赌这个代码不行。这就是我测试它的原因
它成功了,展示了“表演启动”(天哪,我喝醉了吗?)
这似乎打破了不用实例化类就可以调用类的方法的概念
- 那么,类中静态标识符的意义是什么李>
- 所有的公共功能也是静态的吗?真的,我错过了什么
添加: 只是一个通知 我在这里发现了这一点。
第178-179页,这是一个正确的例子(如果我是对的)是的,这是可行的,但有一个警告。顺便说一下,您可能已经关闭了PHP上的 严格标准:不应使用非静态方法Employee::show() 静态调用 在函数定义之前添加一个
static
关键字将显示警告
下面的代码在没有警告的情况下工作
<?php
class Employee {
public static function show() { //<----- Added the static keyword.
echo "show launched\n";
}
}
Employee::show();
如果代码正常,您将收到警告
严格标准:不应静态调用非静态方法Employee::show()
只需在函数中添加static关键字,如public static function show()
它在php版本上有不同的行为。PHP4没有静态关键字(在函数声明上下文中),但仍然允许使用以下静态方式调用方法::。为了向后兼容的目的,PHP5中继续这样做
然而,随着对象模型的变化,引入了-static关键字。
然后,由于PHP5.1.3您会收到关于以下内容的适当严格标准警告:
Strict Standards: Non-static method Employee::show() should not be called statically in ...
我认为这取决于您使用的php版本。此功能在新的php版本中已被弃用,并将在将来的版本中删除
这将不起作用,并且在使用最新的php版本时会出现错误
我使用的是PHP5.5.9-1+sury.org~precise+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**