如何在PHP中同时包含两个类文件,以便它们的方法可以在彼此之间访问?

Luc*_*emy 0 php oop class include

我有以下内容:

include 'firstclass.php';
include 'secondclass.php';
Run Code Online (Sandbox Code Playgroud)

firstclass.php:

class First {
  public static function foo() {
    Second::bar();
  }
  public static function oof() {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

secondclass.php:

class Second {
  public static function bar() {
    First::oof();
  }
}
Run Code Online (Sandbox Code Playgroud)

可以看出,我需要从中访问Second类的方法,First反之亦然.

如何将两者都包含在一起,以便可以从彼此的类中访问它们?

Bee*_*ice 5

您有两种选择:

将它们放在同一个文件中

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

使用自动加载

PHP允许您在调用未知类时向其提供有关查看位置的说明.这称为自动加载(简介).

拥有一个在所有脚本之前运行的初始化脚本.这是最容易通过设置实现auto_prepend_file=/path/to/init.phpphp.ini(详细信息).设置完这样的脚本后,可以向其添加自动加载指令

//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');
Run Code Online (Sandbox Code Playgroud)

如果您的类位于classes子目录中init.php并使用扩展名,则上述代码将起作用.class.php.因此,为了使它适用于您的示例,您的目录结构将需要

init.php
classes/
    First.class.php
    Second.class.php
Run Code Online (Sandbox Code Playgroud)

根据需要调整自动装带器.