PHP公共函数的行为类似于静态函数

PHP公共函数的行为类似于静态函数,php,function,oop,static,Php,Function,Oop,Static,我在读一本关于PHP的书时,遇到了一段奇怪的代码: class Employee { public function show() { echo "show launched\n"; } } Employee::show(); 我是C++的,所以我敢打赌这个代码不行。这就是我测试它的原因 它成功了,展示了“表演启动”(天哪,我喝醉了吗?) 这似乎打破了不用实例化类就可以调用类的方法的概念 那么,类中静态标识符的意义是

我在读一本关于PHP的书时,遇到了一段奇怪的代码:

 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**