php - 为什么命名空间不能在 PHP 所需的文件中工作?

标签 php class namespaces require

这个问题在这里已经有了答案:





PHP namespaces and require

(1 个回答)


2年前关闭。




这个问题对你们中的许多人来说可能听起来很愚蠢,但我仍然无法在文档中找到任何线索(我做了 RTFM)。

当您在 php 文件中设置一个 php 变量,然后在您需要的文件中使用它时,它完全可以工作。
但是今天,在尝试对命名空间做同样的事情时,我遇到了一个意外错误。

在主 php 文件中:

include("./scripts/proj4php/vendor/autoload.php");

use proj4php\Proj4php;
use proj4php\Proj;
use proj4php\Point;

// Initialise Proj4
$proj4 = new Proj4php();

require './functions/myfile.php';

在 myfile.php 中:
$pointDest = $proj4->transform($projWGS84, new Point($r['coord_x'], $r['coord_y'], $projL2e));

最后一条车道抛出了一个未定义的点类错误,而如果我将这一行放在主 php 文件中,那就完全没问题了。

$proj4 和 Point() 都已在主 php 文件中设置,但在所需的 php 文件中只有 $proj4 是好的。

怎么会 ?这里的逻辑是什么?

谢谢大家的帮助 !

最佳答案

您在 main.php 文件中为 proj4php\Point 创建了一个别名,但该别名不会扩展到其他文件,因为它是在编译时解析的,而不是运行时。

您需要在使用它的文件中别名/导入该类。老实说,如果您不在 main.php 中使用它,我认为在 main.php 中导入 Point 毫无意义。

关于php - 为什么命名空间不能在 PHP 所需的文件中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55341465/

相关文章:

python - 有没有办法在不调用 __init__ 的情况下实例化一个类?

clojure - 为什么我不能 :require :refer in clojurescript?

c# - Visual Studio 无法识别同一项目中的命名空间

PHP 和 MySQL - 如何使用 order by desc 和 limit 1 更新单个表中的单行

PHP 数组使用 Laravel 合并到批量插入

php - 在函数中使用 PHP define() 是否真的对该函数的调用者有用?

xml - spring servlet xml 顶部的声明是什么意思?

php - 从 PHP 中的 SQL 语句创建唯一的文件名

java - 将方法定义为它自己的类数据类型有什么用?

java - java中的静态类