【问题标题】:How to add autoload-function to CodeIgniter?如何将自动加载功能添加到 CodeIgniter?
【发布时间】:2011-05-31 13:59:46
【问题描述】:

我希望能够使用 OOP 并在 CodeIgniter 的控制器中创建新对象。所以我需要使用自动加载功能:

function __autoload( $classname )
{
    require_once("../records/$classname.php");
} 

但是如何将它添加到 CodeIgniter?

【问题讨论】:

  • 您应该链接到您的其他问题以更好地表达您的需求;)

标签: php oop codeigniter autoload


【解决方案1】:

您可以将上面的自动加载器添加到app/config/config.php。我之前在这个位置使用过类似的autoload 函数,它工作得非常巧妙。

function __autoload($class)
{
    if (strpos($class, 'CI_') !== 0)
    {
        @include_once(APPPATH . 'core/' . $class . EXT);
    }
} 

由菲尔·斯特金提供。这种方式可能更便携。 core 对你来说可能是 records;但无论如何都要检查你的路径是否正确。此方法还可以防止对加载 CI_ 库的任何干扰(意外)

【讨论】:

  • 这在 PHP 5.4 中有效,但在 PHP 5.5 中会触发错误。有人知道解决方法吗?
  • @tabacitu 我在 5.6.7 中使用它并且没有问题,使用类似 phpab 的东西来生成你的类映射然后包含它
【解决方案2】:

关于Auto-loading Resources 的用户指南非常清楚。

要自动加载资源,请打开 application/config/autoload.php 文件并将要加载的项目添加到自动加载数组中。您会在该文件中找到与每种类型的项目相对应的说明。

【讨论】:

  • 我现在尝试了这个并创建了一个文件loader.php 并将其自动加载为“配置”文件。但看起来该函数是在加载时执行的,所以我收到以下错误消息:Message: require_once(../records/CI_Exceptions.php): failed to open stream: No such file or directory 有什么建议吗?
  • 可能你需要让你的自动加载功能更“智能”,例如将_ 替换为/ 并将路径设置为绝对路径,这样这将使 CI_Exceptions.php -> CI/Exceptions.php跨度>
  • 自动加载部分不是自动加载的。它是由 Codeigniter 预加载的类。 OP 想要的是在尝试实例化类时自动加载类,这是公认的答案。
【解决方案3】:

我建议使用挂钩来将此功能添加到您的代码中。

在 config/config.php 中启用钩子

$config['enable_hooks'] = 真;


在您的 application/config/hooks.php 中添加“pre_system”调用的新钩子,这会在整个系统运行之前发生在 core/CodeIgniter.php 中。

$hook['pre_system'] = 数组( 0 => 数组( '函数' => 'load_initial_functions', '文件名' => 'your_hooks.php', '文件路径' => '钩子' ) );

然后在 hooks 文件夹中创建 2 个文件:

首先:application/hooks/your_functions.php 并放置您的 __autoload 函数和您希望此时可用的所有其他函数。

第二:application/hooks/your_hooks.php 并放置以下代码:

函数 load_initial_functions() { require_once(APPPATH.'hooks/your_functions.php'); }

这将使 your_functions.php 中定义的所有函数在您的代码中随处可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多