如何包含具有相同名称的不同类?

  • 本文关键字:同类 何包含 php class oop
  • 更新时间 :
  • 英文 :


这就是问题所在,我有一个脚本test.php在这个循环中有一个循环,我想使用来自不同文件夹的 4 个类(单独的文件((它们是 pdf 打印类,但每个人都不同(,它们都具有相同的名称PdfCreator我希望每次迭代都包含/要求(使用(不同的类:

$brokerTables = ['test1' => 'broker_report', 'test2' => 'choice_report', 'test3' => 'odit_report', 'test4' => 'other_insurer_report'];
foreach ($brokerTables as $folder => $table) {
require_once($folder . '/classes/' . $brokerTables[$folder]);
$pdfdoc = new PdfCreator($this->conn);
// use $pdfdoc..
};

有没有办法做到这一点? 无需重命名类?

错误是无法声明类 PdfCreator,因为名称已在使用

根本的答案是你不能。PHP 中的类名是唯一的,除了一些不应该在生产中使用的奇特扩展之外,不能"未声明"或重命名。

因此,您需要提出不同的程序设计。例如,您可以将文件夹名称用作类名的一部分,或者更合乎逻辑地用作命名空间,以便每个名称都是唯一的。然后,您需要动态定义类名来创建对象,如下所示:

$className = "\MyTopLevelNamespace\{$folder}\PdfCreator";
$pdfdoc = new $className($this->conn);

请注意,这里不需要命名空间,您可以使用任何您喜欢的命名方案,以使类名唯一,例如

$className = "{$folder}_PdfCreator";
$pdfdoc = new $className($this->conn);

在类名或命名空间中的某处使用该文件夹的另一个优点是,您可以使用自动加载器来查找定义,而不是在每次需要类时显式编写require_once语句。

相关内容

最新更新