Sınıf, soyut sınıfını genişletir dinamik olarak açık php dosyası ve kontrol (özel modül için)

0 Cevap

Ben bazı php dosyaları soyut bir sınıf uzatmak olmadığını görmek için bazı dizinleri ve dosyaları tarar bir yönetici süreci var. Aşağıdaki gibi Yani bir dizin yapısı var.

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

cash.php, credit.php and cheque.php extends abstract.php which are named as MyApp_Payment_Cash, MyApp_Payment_Credit, MyApp_Payment_Cheque.php and MyApp_Payment_Abstract. I need to produce an array that is array('Cash', 'Credit', 'Cheque');. I have code as follows:

$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;
          }
     }
}

Ama tabii ki (instanceof dizeleri bu şekilde çalışmıyor) çalışmıyor. I new $sName() üzerine de çalıştı deneyin ... yakalamak denedim ama PHP çalıştığımızda bir ölümcül attı new MyApp_Payment_Abstract.

Toplamak olabilir gibi ben yeni ödeme yöntemleri gelecekte eklenecek sağlayan bir uzatılabilir ödeme sistemi oluşturmaya çalışıyorum.

I /^(?!Abstract|.*)\.php$/ gibi bir şey benim regex değişebilir ama bu bir gerçek test için oldukça kör bir alet gibi görünüyor.

0 Cevap