【问题标题】:__autoload does not run?__autoload 不运行?
【发布时间】:2014-09-28 00:58:53
【问题描述】:

我的文件结构是这样的;

/
/public
  -index.php
  -login.php
/config.php
/init.php
/classes/ClassGroup/ClassName.class.php

__autoload 在 config.php 中定义,带有类的绝对路径。 index.php 中需要config.php,但是当我尝试启动一个新类时;

$user = new User_User;

结果;

Fatal error: Class 'User_User' not found in /......./public/index.php on line 27

它没有找到它,并且当试图在 __autoload() 的一开始就回显某些内容时,它也没有这样做,所以在我看来,它在找不到类时没有运行该函数。 任何人都知道问题可能是什么?

function __autoload($class){
    //echo "autoloader started";
    $pieces = explode('_', $class);
    $path = __SITE_PATH.'/classes';
    foreach( $pieces as $i ){
        $path .=  '/'.$i;
    }
    //echo "trying to include " .$path.".class.php";
    require_once( $path . '.class.php' );
}

【问题讨论】:

  • 让我们看看自动加载功能...
  • 您可以使用数组 get_included_files() 来检查包含哪些文件。
  • 我不明白你的文件结构。你能把它组织得更好吗?
  • @MarcelColomb 这与自动加载有什么关系? "我家没电" "别担心,你可以去加油站用点水来擦车".
  • 如果您在 config.php 中回显某些内容,它会回显它吗?

标签: php oop autoload


【解决方案1】:

我发现了问题,显然这个函数没有被自动调用。 这是修复;

spl_autoload_register('__autoload');

这行得通。

【讨论】:

  • 这不是解决方案,这是一种解决方法。函数 __autoload 是一个神奇的函数。它重新定义了自动加载。如果它没有被调用,那么另一个问题正在发生。
  • 来自 php.net:提示 spl_autoload_register() 为自动加载类提供了更灵活的替代方案。出于这个原因,不鼓励使用 __autoload(),将来可能会弃用或删除。
  • 你问为什么 __autoload 不起作用。你用“做其他事情”来回答这个问题。即使其他东西确实有效,它也不能回答最初的问题:为什么 __autoload 不起作用。
【解决方案2】:

您的__autoload 函数执行require(),这意味着如果找不到文件,它应该会因致命错误而死。这意味着有两种可能:

  1. 您的__autoload 函数没有被调用
  2. 您的 __autoload 函数正在加载 User.class.php,但该文件未定义 User_User 类

echo $path; die; 添加到您的__autoload 以查看它是否实际被调用以及它试图加载的内容。检查 User.class.php 确实定义了 User_User 类,并且类名中没有错字。

【讨论】:

  • 这是第一个。不知道为什么,似乎它应该工作,但它没有,直到使用 spl_autoload_register()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
相关资源
最近更新 更多