【问题标题】:PHP __autoload Cannot redeclarePHP __autoload 无法重新声明
【发布时间】:2011-05-01 23:51:28
【问题描述】:

我开始使用 PHP __autoload 函数,现在我得到了那些奇怪的致命错误:无法重新声明类 xxx 错误。

这很奇怪,因为这些错误发生在我什至不使用自动加载功能加载的类上。而且我还使用 require_once 来包含文件。

我真的对此感到困惑。有人知道使用自动加载时出现这种错误吗?

【问题讨论】:

  • 你能发布一些示例代码吗?
  • 我收到一个错误“致命错误:无法重新声明 randomstring()(之前在 /var/www/vhosts/businessgame.be/httpdocs/new/functions/function.random.php:24 中声明)在第 34 行的 /var/www/vhosts/businessgame.be/httpdocs/new/functions/function.random.php 中“奇怪的是,当我手动包含文件 Bank.php 时不会发生错误,但是这个文件不包含该功能,甚至不使用它:P。不知道的请举手^^

标签: php autoload


【解决方案1】:

require_once/include_once 在尝试包含文件时只查看文件名,而不是类名。所以你可以在 Foo.php 和 B.php 中都有 Foo 类,然后你会得到那个错误。

我不确定__autoload 会给您带来什么问题,除非__autoload 需要Foo.php,因为它需要Foo 类,并且您需要手动重新定义类Foo 的B.php。

顺便说一下,用spl_autoload_register代替__autoload

【讨论】:

  • 文件名正确。只是它声称已经加载了一个类,而实际上并没有。当我跟踪正在加载的类时,我发现没有双打。
  • 感谢关于 spl_autoload_register 的提示!帮了我一把。
【解决方案2】:

我有同样的情况..我改变的只是它对我有用

include('xxx.php');

require_once('xxx.php');

【讨论】:

    【解决方案3】:

    我不会假装最好的答案。只是我的想法。

    __autoload() 在 PHP 7.2 中已弃用,可能会被删除。

    我找到了这种上传/包含文件的方法

    //initialize a function which will upload files
    function upload(){//you can call the function as you like
      //your path to files goes here
    }
    
    spl_autoload_register('upload')//specify the function, where you include your files(in this case it's upload function   
    

    【讨论】:

      【解决方案4】:

      我以前也有过这种情况,但不知道是什么原因造成的。确保您使用的是require_once/include_once,而不是初学者的普通版本。我认为问题与使用 class_exists 而不告诉它跳过自动加载 (class_exists($name, false)) 有关 - 你这样做吗?

      【讨论】:

      • 但是只有在类不存在时才调用自动加载?我已经跟踪了自动加载类包含的文件,但我没有看到任何双打。这是一个奇怪的错误。
      【解决方案5】:

      我发现了问题。显然,当它想要包含 Bank 类时,它从当前目录中获取了“bank.php”文件^^。这只是银行页面,它应该包含“src/model/Bank.php”。我从搜索列表中删除了当前目录,它已被修复。

      因此,请始终确保自动加载功能包含正确的文件。好的做法是更直接地命名您的文件,例如 class.Bank.php 或 class.User.php 而不是 Bank.php 或 User.php。

      感谢您的帮助和快速响应!

      【讨论】:

      • 所以问题不是 required_once 而是包含了错误的文件^^
      • 是的,想清楚了,我认为为了一个相当明显的错误而改变你的整个文件命名约定是没有意义的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2013-08-21
      相关资源
      最近更新 更多