如何在 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
访问Second
class的方法,反之亦然。
我如何将两者都包括在内,以便可以从彼此的 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.php
的 classes
子目录中并使用扩展名 .class.php
,则上面的代码将起作用。因此,要使其与您的示例一起使用,您的目录结构需要
init.php
classes/
First.class.php
Second.class.php
适当调整自动加载器。
我有如下内容:
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
访问Second
class的方法,反之亦然。
我如何将两者都包括在内,以便可以从彼此的 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.php
的 classes
子目录中并使用扩展名 .class.php
,则上面的代码将起作用。因此,要使其与您的示例一起使用,您的目录结构需要
init.php
classes/
First.class.php
Second.class.php
适当调整自动加载器。