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

5

我想知道何时使用完全限定的类名,或者何时将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' );
    }
}

目前我有这段代码,我的PHPStorm告诉我不必要的完全限定名称。当我改成以下内容时,这个提示就消失了:

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' );
    }
}

所以我想知道它们在性能、代码可读性方面有什么区别,哪一个更好。


3
就代码可读性而言,我总是选择使用 use,因为它意味着你可以在命名空间下声明所有需要的类,然后无论何时需要初始化这些类,都可以直接使用而无需每次都输入完整的类名称。 - treyBake
使用“using”语句可以提高代码的可读性,在需要多次使用特定类时非常有用。顺便说一下,“using”语句也是标准约定。当存在同名类时,可以使用完全限定名称来解决冲突。 - Th3
2
那么使用 use 不会以任何方式影响性能吗? - user936965
1个回答

1

当你使用 use SomeNamespace\ClassName 时,你不需要在后面添加 \SomeNamespace 来引用 ClassName。因此,你的示例应该是:

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' );
    }
}

请注意,当您在同一命名空间中时,无需将命名空间添加到类名中。当 namespace App; 时,请使用 User::class 而不是 \App\User::class

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接