PHP致命错误:找不到类

3
我有一个非常奇怪的问题。在一个名为“SMSNotifier”的类中,我有……
require_once (__DIR__ . "/../InvitationNotifier.php");
[...] 
class SMSNotifier extends InvitationNotifier {
[...] 
}

这个类被包含在另一个脚本中,该脚本从命令行调用。当调用这个脚本时,我得到了一个错误信息:

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

奇怪的是,如果我用require代替require_once,我会得到以下结果:
PHP Fatal error:  Cannot redeclare class InvitationNotifier in [...]/include/classi/notifiche/InvitationNotifier.php on line 11

这里可能出了什么问题?提前感谢任何想法。我已经没什么思路了…

2
InvitationNotifier.php 文件中是否有 InvitationNotifier 类?它使用了命名空间吗? - AbraCadaver
是的,有,并且它不使用命名空间。 抽象类InvitationNotifier实现了Notifier接口。 - eureka
当您使用类的绝对路径时会发生什么? - Mr. Concolato
1
你是否将任何的require放置在像函数或类这样的容器中?我不知道这种情况会如何发挥作用:在一个函数内部,你需要一次InvitationNotifier。它被包含并且函数结束。现在,在函数外部,你再次需要一次。它已经被要求了,但是类定义被包含在函数内部,所以当你尝试使用它时它不存在。改为使用require将在函数内部定义类(一个定义)和外部(第二个定义-错误)。 - kainaw
实际上,require/require_once 在类定义之外且在任何函数之外。我没有理解你的观点,如果你能详细说明一下。 - eureka
2个回答

3

我一直在努力理解这个问题,发现存在循环依赖关系。我进行了“削减”,问题已经解决。希望这能帮助到某些人。


1
你不应该像在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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接