gpt4 book ai didi

php - 如何使用 PHP7 从静态方法调用特征的非静态方法?

转载 作者:行者123 更新时间:2023-12-04 10:56:15 29 4
gpt4 key购买 nike

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 关键字创建一个实例。但是我不能使用带有特征的"new"。

我使用'declare (strict_types = 1);'和'error_reporting(E_ALL);'。

我应该静态地更改特征的方法并替换使用特征的所有内容吗?

最佳答案

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

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 中声明你的函数是静态的:
trait trait1
{
public static function dummy()
{
var_dump("fkt dummy");
}
}
class c1{
use trait1;
}

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

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

关于php - 如何使用 PHP7 从静态方法调用特征的非静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59169625/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com