如何在 PHP 中同时包含两个 class 文件,以便它们的方法可以相互访问?

How to include two class files at the same time in PHP, so that their methods are accessible between each other?

我有如下内容:

include 'firstclass.php';
include 'secondclass.php';

firstclass.php:

class First {
  public static function foo() {
    Second::bar();
  }
  public static function oof() {
    // ...
  }
}

secondclass.php:

class Second {
  public static function bar() {
    First::oof();
  }
}

可以看出,我需要从First访问Secondclass的方法,反之亦然。

我如何将两者都包括在内,以便可以从彼此的 classes 访问它们?

您有两个选择:

将它们放在同一个文件中

最简单最快的修复方法是将两个 classes 放在同一个文件中。 PHP 在执行之前解析整个文件,因此 classes 将能够使用彼此的方法。这可行,但更专业和可扩展的解决方案是另一种选择。

使用自动加载

PHP 允许您在调用未知 class 时向其提供有关查找位置的说明。这称为自动加载 (intro)。

有一个在所有脚本之前运行的初始化脚本。这最容易通过在 php.ini (details) 中设置 auto_prepend_file=/path/to/init.php 来完成。一旦你设置了这样的脚本,你就可以向它添加自动加载指令

//function called whenever you use an unknown class. It will
//be passed the name of your class
function my_autoloader($class) {
    include __DIR__ .'/classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

如果您的 classes 位于 init.phpclasses 子目录中并使用扩展名 .class.php,则上面的代码将起作用。因此,要使其与您的示例一起使用,您的目录结构需要

init.php
classes/
    First.class.php
    Second.class.php

适当调整自动加载器。