PHP对象中的文件引用是如何工作的?
我正在尝试创建一个PHP对象,可以在需要时根据需要加载其他文件中的对象。我的问题是,当我根据类定义的文件位置引用文件时,它找不到文件。因此,文件结构: /Test.php /os/os.php(扩展内核) /os/kernel.php /os/libraries/lib1.php /os/libraries/lib2.php /os/libraries/lib3.phpPHP对象中的文件引用是如何工作的?,php,file,object,reference,Php,File,Object,Reference,我正在尝试创建一个PHP对象,可以在需要时根据需要加载其他文件中的对象。我的问题是,当我根据类定义的文件位置引用文件时,它找不到文件。因此,文件结构: /Test.php /os/os.php(扩展内核) /os/kernel.php /os/libraries/lib1.php /os/libraries/lib2.php /os/libraries/lib3.php 在kernel.php中,这些库被引用为“libraries/lib1.php”。如果我在Test.php中创建一个“os”对
在kernel.php中,这些库被引用为“libraries/lib1.php”。如果我在Test.php中创建一个“os”对象。找不到库文件 我认为,如果指定任何类型的相对路径(而不仅仅是文件名或绝对路径),PHP将尝试将其包含在相对于
$\u服务器['SCRIPT\u filename']
(运行的主脚本)的路径中,因此会得到不一致的结果
您可以在文件中的某个位置定义您知道将始终包含的绝对路径,例如:
<?php
//e.g. this could be file os/kernel.php
//define absolute path to libraries dir
define('LIBRARY_PATH', dirname(__FILE__) . '/libraries');
为类使用良好的命名约定,包括路径和使用spl\U自动加载
例如:
按如下方式命名您的类:
类操作系统
类内核
类库
注册您的包含路径
set_include_path(implode(PATH_SEPARATOR, array(
realpath('os/'),
get_include_path(),
)));
spl_autoload_register("autoload");
并使用自动加载:
function autoload($className) {
$name = implode("/", explode("_", $className));
require_once(strtolower($name) . ".php");
}
function autoload($className) {
$name = implode("/", explode("_", $className));
require_once(strtolower($name) . ".php");
}