为什么 use 一个未定义的类,PHP 不报错

rt

为什么 use 一个未定义的类,PHP 不报错
为什么这样能正常执行,不报错呢?

php
我未曾珍惜的,我不再拥有?‍?️
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 10
Jyunwaa

因为use发生在编译时,不是运行时,引入任意的函数常量都不会报错。
还有一个类关键字::class的解析也是发生在编译时,所以以下这种代码也不会报错,而且还会正常输出:

echo Hello\World\ExistClass::class; // Hello\World\ExistClass
echo Hello\World\NotExistClass::class; // Hello\World\NotExistClass
use Hello\World\NotExistClass;
echo NotExistClass::class; // Hello\World\NotExistClass
$c = new NotExistClass(); // Fatal error: Uncaught Error: Class "Hello\World\NotExistClass" not found in ...
1年前 评论
Jyunwaa (作者) 1年前
haodudecao (楼主) 1年前
Jyunwaa

因为use发生在编译时,不是运行时,引入任意的函数常量都不会报错。
还有一个类关键字::class的解析也是发生在编译时,所以以下这种代码也不会报错,而且还会正常输出:

echo Hello\World\ExistClass::class; // Hello\World\ExistClass
echo Hello\World\NotExistClass::class; // Hello\World\NotExistClass
use Hello\World\NotExistClass;
echo NotExistClass::class; // Hello\World\NotExistClass
$c = new NotExistClass(); // Fatal error: Uncaught Error: Class "Hello\World\NotExistClass" not found in ...
1年前 评论
Jyunwaa (作者) 1年前
haodudecao (楼主) 1年前

你没new,一new就报错了

1年前 评论

stackoverflow同样问题的回答:stackoverflow.com/questions/414035...

PHP官网相关内容:www.php.net/manual/zh/language.nam...

一位laravel核心成员@Tim MacDonald同样问题的博文:timacdonald.me/php-be-all-like-tha...

1年前 评论
haodudecao (楼主) 1年前

use后用的时候才会加载吧

1年前 评论

use 的时候不会报错。但是会在你使用该类的时候报错。

1年前 评论

PHP是脚本语言,运行时报错,这也不是语法错误,没有运行到所以不报错

1年前 评论

因为在 PHP 中,use 关键字有且只有一个作用 「命名空间导入」,其只是引入命名空间,方便后续代码而已(可以理解为类的别名,仅仅是为了后续代码使用类时不必每次都写全完整的命名空间),useimport,并不存在类文件的导入,PHP 本身并不涉及任何类的自动加载。

你在使用一些框架时,会发现没有 require 一个类文件,但可以直接使用,需要注意的是,这里并非是 use 引入了文件,而是 composer 通过代码逻辑自动引入了这个文件,详情可见项目目录下 vendor/composer/ 下的文件。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!