php - 动态打开php文件并检查类是否扩展抽象类(对于自定义模块)

标签 php

我有一个管理进程,它扫描一些目录和文件以查看某些 php 文件是否扩展了抽象类。所以我的目录结构如下。

/models
/models/Random.php
/models/Payment/Abstract.php
/models/Payment/Cash.php
/models/Payment/Credit.php
/models/Payment/Cheque.php

cash.php、credit.php和cheque.php扩展了abstract.php,分别命名为MyApp_Payment_Cash、MyApp_Payment_Credit、MyApp_Payment_Cheque.php和MyApp_Payment_Abstract。 我需要生成一个数组 array('Cash', 'Credit', 'Cheque');。我的代码如下:

$aModules = array();
foreach (new DirectoryIterator(APPLICATION_PATH . '/models/Payment') as $oFile) {
     if (preg_match('/^(.*)\.php$/', $oFile->getFileName(), $aMatches)) {
          $sName = sprintf('MyApp_Payment_%s', $aMatches[1]);
          if ($sName instanceof MyApp_Payment_Abstract) {
              $aModules[] = $sName;
          }
     }
}

但这显然行不通(instanceof 在字符串上不能以这种方式工作)。我也尝试过尝试...捕获 new $sName() 但 PHP 在尝试 new MyApp_Payment_Abstract 时抛出了 fatal error 。

正如您可能想到的那样,我正在尝试构建一个可扩展的支付系统,允许将来添加新的支付方式。

我可以将我的正则表达式更改为 /^(?!Abstract|.*)\.php$/ 之类的内容,但这对于真正的测试来说似乎是一个相当生硬的工具。

最佳答案

不确定您是否得到了答案,但我发现 php 函数 is_subclass_of 是测试父类(或抽象类)的有效方法:

http://www.php.net/manual/en/function.is-subclass-of.php

关于php - 动态打开php文件并检查类是否扩展抽象类(对于自定义模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730595/

相关文章:

php - 使 PhP 代码先于 Javascript 执行

php - 合并两个查询并根据 Laravel 中的 created_at 对它们进行排序

php - 从返回 "outer"数组的多个循环创建 1 "inner"数组

javascript - angularjs orderBy 无法正常工作

php - 我想在 MySQL 数据库中有一列自动计算 DATETIME 差异

php - Stripe - 通过 PHP、iOS 和 Alamofire 进行部分退款

PHP/MySQL 代码不会将用户 ID 和密码插入表中

php - UTF-8贯穿始终

php - 为什么将 false 转换为数组不会导致空数组

php - 如果数据库中的值未支付或为 0(二进制),如何将颜色更改为红色?