PHP对象中的文件引用如何工作?

时间:2010-04-22 15:26:34

标签: 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”对象。找不到lib文件。

2 个答案:

答案 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");
}