我正在尝试创建一个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”对象。找不到lib文件。
答案 0 :(得分:0)
我认为如果你指定任何类型的相对路径(而不仅仅是文件名或绝对路径),PHP会尝试将它包含在$_SERVER['SCRIPT_FILENAME']
(运行的主脚本)中,因此你会得到它结果不一致。
您可以在文件中的某个位置定义一个绝对路径,您知道它将始终包含在内,例如:
<?php
//e.g. this could be file os/kernel.php
//define absolute path to libraries dir
define('LIBRARY_PATH', dirname(__FILE__) . '/libraries');
然后在其他地方(在kernel.php和其他人中)在你包含另一个文件时使用它:
<?php
include LIBRARY_PATH . '/lib1.php';
答案 1 :(得分:0)
为您的类使用一个好的命名约定,include_path并使用spl_autoload。
例如:
将您的类命名为: 等级Os class Kernel class Libraries_Lib1 ...
注册您的包含路径
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");
}