【发布时间】:2020-11-14 17:34:59
【问题描述】:
当类定义在正在运行的 .php 文件的同级文件夹中时,PHP 如何找到一个类?我正在运行的 php 文件位于 ./examples 文件夹中。类文件位于./src/Fedex。
./examples/address-validation.php 用于设置类路径的 use 语句
use FedEx\AddressValidationService\Request;
use FedEx\AddressValidationService\ComplexType;
use FedEx\AddressValidationService\SimpleType;
$addressValidationRequest = new ComplexType\AddressValidationRequest();
当我运行 .php 文件时,出现此未找到错误:
Fatal error: Uncaught Error: Class 'FedEx\AddressValidationService\ComplexType\AddressValidationRequest'
not found in C:\xampp\htdocs\php-fedex-api-wrapper\examples\address-validation.php
类的位置在./src/FedEx/AddressValidationService 文件夹中。 ./src 和 ./examples 文件夹都在同一个父文件夹中。
【问题讨论】:
-
您应该使用
$_SERVER['DOCUMENT_ROOT']来解决此类问题。 -
类的自动解析和文件的加载是通过称为自动加载的机制完成的。你必须用自动加载注册东西,然后你就可以使用它们了。 Composer 在帮助您生成注册表方面做得很好,并提供了将命名空间/类映射到文件系统的各种方法。
-
@JAAulde 是对的。您必须首先使用自动加载注册类。如果您对本地地址有疑问,请使用 dirname(__FILE__) 来定义正确的位置。
-
你在 Composer 自动加载器中使用过这个 API 吗?
-
use语句只设置一个短别名,因此您不需要每次都输入完整的命名空间;它们与类或文件加载没有任何关系。要从其他文件加载代码,您需要 include 他们,或使用包含它们的工具(例如 Composer 的自动加载器)。
标签: php