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

rt

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

php
我未曾珍惜的,我不再拥有?‍?️
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 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年前

你没new,一new就报错了

1年前 评论

use后用的时候才会加载吧

1年前 评论

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

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年前

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

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年前

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

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

1年前 评论

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