gpt4 book ai didi

php - PHP 'use' 关键字如何工作(在 Symfony 2 中)?

转载 作者:行者123 更新时间:2023-12-04 16:53:25 25 4
gpt4 key购买 nike

在 Symfony 2 中,所有请求都通过 app_dev.php 路由(或 app.php)。

前几行如下所示:

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;
...

理论上,我知道这只是将指定的命名空间(或类)导入到当前作用域。我不明白的是 PHP 如何将其映射到文件。例如, Debug类位于:
vendor/symfony/symfony/src/Symfony/Component/Debug/Debug.php

PHP怎么知道看 vendor/symfony/symfony/src/ ?

我可能误解了正在发生的事情,但任何澄清将不胜感激。

最佳答案

知道类所在的文件不是语言的工作,而是自动加载器的工作。

所有use关键字确实是这个实例创建了一个别名:

use Symfony\Component\HttpFoundation\Request;

这是在以下脚本中说的,当我引用 Request 时我的意思是 Symfony\Component\HttpFoundation\Request .如果我使用 Request对象以某种方式(通过创建实例或在其上调用静态方法)然后自动加载器将尝试加载该类定义的文件,如果它尚未加载。

但是,自动加载器的内部工作原理因项目而异。已采取措施标准化自动装载机行为,à la PSR-4 ,但语言中没有任何内容表明您必须遵守该标准。例如,您可以有一个方案,其中所有类文件都驻留在一个目录中,而您的自动加载器只是从那里加载所有类,而不管它们在什么命名空间中。

该方案会受到以下事实的影响:您只能拥有一个具有每个名称的类,但没有什么可以阻止您这样做。

回答你的问题:“它怎么知道“Symfony\Component\Debug\Debug”是一个有效的命名空间?”

它没有,因为它实际上并没有出去并在此时尝试加载该类。如果在任何随机 PHP 脚本中,您将这样的内容放在顶部:
use \Non\Existant\ObjectClass;

但永远不要真正使用 ObjectClass在任何地方,你都不会出错。如果您尝试说 new ObjectClass ,不过,你会得到一个 class not found 错误。

关于php - PHP 'use' 关键字如何工作(在 Symfony 2 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com