【问题标题】:Non-static method calling inside a class is not Deprecated in PHP?PHP 中不弃用类内部的非静态方法调用?
【发布时间】:2018-05-21 13:20:16
【问题描述】:

如 PHP 手册所述

从 PHP 7.0.0 开始,静态调用非静态方法已经 通常已弃用(即使从兼容的上下文中调用)。

检查此声明-

我在一个类之外调用一个非静态方法然后它产生错误

class A{
    public function foo(){
        echo "testing<br/>";
    }
}
A::foo();

不推荐使用:非静态方法 A::foo() 不应被静态调用

但是当我在类中调用非静态方法时,它不会生成Deprecated error

class A{
    public function foo(){
        echo "testing<br/>";
    }

    public function Display(){
        A::foo();    //calling a Non-static method inside statically
        self::foo(); //calling a Non-static method inside statically
    }
}
$obj=new A();
$obj->Display();

是否仅在从类外部静态调用时才被弃用?

【问题讨论】:

  • 从静态方法尝试。
  • 在类内你可以使用类名的所有数据或方法不需要定义静态数据或方法但是在类外你不能使用类名的数据和方法如果它没有用静态关键字定义,可以通过类对象访问

标签: php


【解决方案1】:

范围解析运算符或双冒号运算符不仅用于静态调用。

在类中,操作符可用于以非静态方式引用类本身。

这就是你为 self::foo() 和 A::foo(); 所做的。 要在类中进行静态调用,您需要使用 static::&lt;methodName&gt; 语句

看这里:http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

【讨论】:

    【解决方案2】:

    在类方法中使用A::self::,称为$this-&gt;。来自Docs

    警告 在 PHP 7 中,静态调用非静态方法已被弃用, 并将生成 E_DEPRECATED 警告。支持来电 将来可能会删除静态的非静态方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多