如何解决php tinker中的命名空间问题?

时间:2018-01-24 17:36:16

标签: php namespaces tinker

我有以下代码:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Enemy extends Model
{
    // ...
    static function fight($id)
    {
        if(Enemy::calcDist($id))
        {
            $model = Enemy::find($id);
            if($model->status == 1)
            {
                $model->status = 2;
                $model->save();
            }
        }
    }
}

当我尝试在php修补程序中执行App\Enemy::fight(1)时,它显示错误:

"Class 'App\App\Enemy' not found"

我尝试"calcDist($id)""self::calcDist($id)"find($id)函数,但没有结果。

我如何解决这个问题?

编辑:我发现了问题;该错误来自代码的另一部分......

1 个答案:

答案 0 :(得分:1)

当您在namespace App时,您不需要在通话中使用App\Enemy

只需使用Enemy::fight(1),或使用绝对命名空间\App\Enemy::fight(1)

当您按名称使用静态类时,引擎会将类搜索到当前名称空间中。如果没有给出命名空间,则它使用命名空间“\”。

namespace App;

Enemy::fight(1); // \App\Enemy::fight(1) ok
App\Enemy::fight(1); // \App\App\Enemy::fight(1) wrong