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"
不好,但有效。但是你不应该在不考虑你的代码设计的情况下使用它。
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消