【问题标题】:PHP Fatal error: Class not foundPHP致命错误:找不到类
【发布时间】:2015-03-20 09:18:33
【问题描述】:

我有一个非常奇怪的问题。在一类“SMSNotifier”中,我有

require_once (__DIR__ . "/../InvitationNotifier.php");
[...] 
class SMSNotifier extends InvitationNotifier {
[...] 
}

这个类包含在另一个从 cli 调用的脚本中。调用此脚本时,我得到 ​​p>

PHP Fatal error:  Class 'InvitationNotifier' not found in [...]/include/classi/notifiche/notifiers/SMSNotifier.php on line 12

奇怪的是,如果我将 require_once 替换为 require,我会得到 ​​p>

PHP Fatal error:  Cannot redeclare class InvitationNotifier in [...]/include/classi/notifiche/InvitationNotifier.php on line 11

这可能是什么问题?

提前感谢您的任何想法。我已经用完了它们......

【问题讨论】:

  • InvitationNotifier.php 中是否有 InvitationNotifier 类?它使用命名空间吗?
  • 是的,有,没有,它不使用命名空间。抽象类 InvitationNotifier 实现 Notifier { }
  • 当你使用类的绝对路径时会发生什么?
  • 您是否将您的任何需求放入容器中,例如函数或类?我不知道这种情况会如何发展:在一个函数中,你 require_once InvitationNotifier。它被包括在内并且功能结束。现在,在函数之外,您需要再次调用它。它已经是必需的,但类定义包含在函数中,因此当您尝试使用它时它不存在。更改为 require 将在函数中定义类(一个定义)和函数外部(第二个定义 - 错误)。
  • 实际上 require/require_once 是在类定义之外和任何函数之外。我没明白你的意思,如果你能详细说明一下

标签: php classloader require require-once


【解决方案1】:

我一直在尝试理解这个问题,并发现存在循环依赖。我已经“削减”了它,问题就消失了。希望这可以帮助某人

【讨论】:

    【解决方案2】:

    您应该只是像 1990 年那样加载文件。使用 Composer (PHP) 并遵循 PSR-4 http://www.php-fig.org/psr/psr-4

    composer.json

    {
      "autoload": {
        "psr-4": {"InvitationNotifier\\": "lib/"}
      }
    }
    

    index.php

    require_once('autoload.php');
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2013-09-27
      • 2013-08-16
      • 2016-08-21
      • 2014-05-08
      • 2012-08-02
      • 2012-01-02
      • 2014-01-02
      相关资源
      最近更新 更多