何时使用“use”或完全限定名称

5 php namespaces

我想知道何时使用完全限定的类名或何时use在类的顶部放置语句。例如:

namespace App;

use Illuminate\Database\Eloquent\Model;

class ImageStatus extends Model {
    public function image(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
        return $this->belongsTo( \App\Image::class, 'id' );
    }

    public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
        return $this->belongsTo( \App\User::class, 'id' );
    }
}
Run Code Online (Sandbox Code Playgroud)

目前我有这段代码,我的 PHPStorm 告诉我Unnecessary fully qualified name。当我将其更改为:时,该提示消失了:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class ImageStatus extends Model {
    public function image(): BelongsTo {
        return $this->belongsTo( \App\Image::class, 'id' );
    }

    public function user(): BelongsTo {
        return $this->belongsTo( \App\User::class, 'id' );
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道有什么区别,性能方面,代码可读性以及一个是否比另一个更好。

Jus*_*nas 1

当你use SomeNamespace\ClassName这样做时,你没有稍后追加\SomeNamespaceClassName. 所以你的例子应该是

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class ImageStatus extends Model {
    public function image(): BelongsTo {
        return $this->belongsTo(Image::class, 'id' );
    }

    public function user(): BelongsTo {
        return $this->belongsTo(User::class, 'id' );
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,当您位于同一名称空间中时,不需要将名称空间添加到类名中。namespace App;那么什么时候User::class而不是\App\User::class