Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP对象中的文件引用是如何工作的?_Php_File_Object_Reference - Fatal编程技术网

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

PHP对象中的文件引用是如何工作的?,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”对

我正在尝试创建一个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”对象。找不到库文件

我认为,如果指定任何类型的相对路径(而不仅仅是文件名或绝对路径),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");
}