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

时间:2014-03-07 09:47:24

标签: php function oop static

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

 class Employee {
        public function show() {
            echo "show launched\n";
        }
    }

    Employee::show();

我来自C ++所以我打赌这个代码不起作用。这就是我测试它的原因。

它有效,显示“show launch”(omg,我喝醉了吗?)!

似乎打破了这样一个概念,即没有类的实例化就可以调用类的方法。

  • 类中静态标识符的重点是什么?
  • 所有公共功能是否也是静态的?真的,我错过了什么?

提前致谢。


增加: 只是一个通知。

我在book中找到了。 第178-179页,它是作为正确的例子给出的(如果我是对的)

4 个答案:

答案 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级别   警告。

Source

答案 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()

等函数中添加static关键字即可