【问题标题】:PHP public function behaves like staticPHP 公共函数的行为类似于静态
【发布时间】:2014-04-10 09:31:12
【问题描述】:

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

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

    Employee::show();

我来自 C++,所以我敢打赌这段代码行不通。这就是我测试它的原因。

它奏效了,显示“节目启动”(天哪,我喝醉了吗?)!

这似乎打破了类的方法可以在不实例化类的情况下调用的概念。

  • 那么类中的静态标识符有什么意义呢?
  • 所有公共函数也是静态的吗?真的,我错过了什么?

提前致谢。


补充: 只是一个通知。

我在这个book 中发现了这一点。 第 178-179 页,它是作为正确示例给出的(如果我是对的)

【问题讨论】:

    标签: php function oop static


    【解决方案1】:

    代码有效,您将收到警告

    严格标准:不应静态调用非静态方法 Employee::show()

    只需在函数中添加静态关键字,如@9​​87654321@

    【讨论】:

      【解决方案2】:

      是的,这会起作用,但会发出警告。顺便说一句,您可能已经在 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

      【讨论】:

        【解决方案3】:

        我认为这取决于您使用的 php 版本。此功能在新的 php 版本中已弃用,并将在未来的版本中删除。

        这将不起作用,并且在使用最新的 php 版本时会出错。

        我正在使用 PHP 5.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**
        

        【讨论】:

          【解决方案4】:

          它具有与 php 版本相关的不同行为。 PHP 4 没有 static 关键字(在函数声明上下文中),但仍然允许使用 :: 静态调用方法。为了向后兼容,这在 PHP 5 中继续。

          但是随着PHP 5 对象模型的变化 - 引入了静态关键字。 然后,从 PHP 5.1.3 开始,您会收到关于以下内容的严格标准警告:

          Strict Standards:  Non-static method Employee::show() should not be called statically in ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-12-28
            • 2019-10-02
            • 2015-02-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-27
            • 1970-01-01
            相关资源
            最近更新 更多