致命错误: 未捕获的错误: 不能将 'App\Models\User' 用作 trait,位于 /var/www/app/src/Models/Admin.php:10
Fatal error: Uncaught Error: Cannot use 'App\Models\User' as a trait in /var/www/app/src/Models/Admin.php:10
ID: php/class-not-final-extends
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| PHP 8.0 | active | — | — | — |
| PHP 8.1 | active | — | — | — |
| PHP 8.2 | active | — | — | — |
| PHP 8.3 | active | — | — | — |
根因分析
PHP 的 use 语句被误解为 trait 上下文,通常是因为开发者在类体内错误地写了 'use App\Models\User;' 而不是继承它,或者该类未声明为 trait。
English
PHP's use statement is misinterpreted when a class name is used in a trait context, typically because the developer accidentally wrote 'use App\Models\User;' inside a class body instead of extending it, or the class is not declared as a trait.
官方文档
https://www.php.net/manual/en/language.oop5.traits.php解决方案
-
Replace 'use App\Models\User;' inside the class body with 'class Admin extends \App\Models\User' to properly inherit from the class.
-
If the intent is to use a trait, ensure the source file defines a trait (e.g., 'trait User { }') and then use 'use User;' inside the class. -
Check for typos: verify that the class file at src/Models/User.php declares 'class User' not 'trait User' or 'interface User'.
无效尝试
常见但无效的做法:
-
85% 失败
Adding a 'use' statement at the top of the file for the class does not fix the error because the problem is the misuse of 'use' inside the class body to import a class, not a trait.
-
60% 失败
Renaming the class to a trait by adding 'trait User { }' works but changes the design incorrectly; the class should be extended with 'extends'.