为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 PHP7 从静态方法调用 trait 的非静态方法?

如何使用 PHP7 从静态方法调用 trait 的非静态方法?

PHP
米脂 2022-06-11 09:20:14
trait ClearFolder{    public function clearFolder($dir)    {        //codes...    }    public function clearInFolder($dir)    {        $this->clearFolder($dir);        mkdir($dir);    }}use boot\library\traits\ClearFolder;class FileCache{    //codes....    use ClearFolder;    public static function clearAll()    {        //Case1. Uncaught Error: Using $this when not in object...           $this->clearInFolder(self::$storage . '/');        //Case2. Non-static method boot\libr... should not be called statically         self::clearInFolder(self::$storage . '/');        //Case3. Cannot instantiate trait...        $trait = new ClearFolder;    }}要在静态方法中使用另一个类的非静态方法,我必须使用 new 关键字创建一个实例。但是我不能使用带有特征的“新”。我使用'declare (strict_types = 1);' 和'error_reporting(E_ALL);'。我应该静态更改特征的方法并替换使用该特征的所有内容吗?
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

如果要使用 trait 中的非静态函数,则必须创建一个实例:


trait trait1

{

    public function dummy()

    {

      var_dump("fkt dummy");

    }

}

class c1{

  use trait1;


  public static function static1(){

    (new static)->dummy();

  }

}


c1::static1();  //string(9) "fkt dummy"

或者您将特征中的函数声明为静态:


trait trait1

{

    public static function dummy()

    {

      var_dump("fkt dummy");

    }

}

class c1{

  use trait1;


c1::dummy(); //string(9) "fkt dummy"

不好,但有效。但是你不应该在不考虑你的代码设计的情况下使用它。


查看完整回答
反对 回复 2022-06-11
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信