gpt4 book ai didi

php - 从不同的文件和目录自动加载类和函数

转载 作者:可可西里 更新时间:2023-11-01 12:31:47 24 4
gpt4 key购买 nike

我有这个自动加载代码:

function __autoload($class_name)
{
//class directories
$directorys = array(
'./Controls/',
'./Config/',
'./Utility/'
);
//for each directory
foreach($directorys as $directory)
{
//see if the file exsists
if(file_exists($directory.$class_name . '.php'))
{
require_once($directory.$class_name . '.php');
//only require the class once, so quit after to save effort (if you got more, then name them something else
return;
}
}
}

我有三个目录,它们包含我所有的类和函数。

我可以在 Controls 目录中创建一个自动加载文件并使用它来加载其他 php 文件中的所有函数或类吗?我的意思是例如 index.php 文件 /portal/main/index.php

是否可以加载 index.php 文件中的 controlsconfig 类,而不包含 index.php 上面的任何文件文件

我的意思是自动加载会自动理解哪个文件正在请求一个类或函数并为其包含该文件。

更新代码:

function __autoload($class_name)
{
//class directories
$directorys = array(
'/Controls/',
'/Config/',
'/Utility/'
);
//for each directory

$ds = "/"; //Directory Seperator
$dir = dirname(__DIR__); //Get Current file path
$windir = "\\"; //Windows Directory Seperator
$path = str_replace($windir, $ds, $dir);

foreach($directorys as $directory)
{
//see if the file exsists
if(file_exists( $path . $directory . $class_name . '.php'))
{
require_once( $path . $directory . $class_name . '.php');
//only require the class once, so quit after to save effort (if you got more, then name them something else
return;
}
}
}

我已经更新了代码,它包含了文件,但我唯一的问题是这个函数没有自动运行,

例如我的自动加载文件在:root/Controls/autoload.php我需要一些类和函数:root/portal/index.php

当我在 index.php 中定义类时,出现文件不存在的错误我应该手动调用 index.php

中的 autoload.php 文件

我怎样才能使自动加载变得智能,我不应该将它包含在每个文件中以包含类?

请帮帮我。提前致谢

最佳答案

简单的手动解决方案:将您的 autoload 文件放入您的项目根目录并将其包含在您的索引文件中,这将完成这项工作。

但是如果你想使用 htaccessphp.ini :将名为 .user.ini 的文件放入文档根目录并添加 auto_prepend_file那里的指令:

auto_prepend_file = /home/user/domain.com/init.php

该文件必须在 PHP 的 include_path 中。因此,您必须将文件的目录设置在 php.ini 中的 include_path 中,或者在 .htaccess 中使用 php_value 语句进行设置。

php_value include_path ".:/path/to/file_directory"
php_value auto_prepend_file "file.php

如果您在 .htaccess 中使用上述方法,请务必从 php.ini 中复制 include_path 并添加 :/path_to/file_directory 这样您就不会丢失任何已经需要的包含。

或者,直接在 php.ini 中将 :/path/to/file_directory 添加到 include_path

更新

如果您无法修改 include_path,您可以尝试指定 auto_prepend_file 的相对路径。这应该有效,因为发送的文件路径的处理方式与使用 require() 调用时的处理方式相同:

php_value auto_prepend_file "./file.php"

关于php - 从不同的文件和目录自动加载类和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33852487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com