使用CakePHP上的class_exists的工厂模式

时间:2014-03-07 17:55:00

标签: php cakephp factory-pattern

我有以下代码(尝试模拟工厂模式):

CoinConnectorFactory.php

public static function build($connector) {
    $connector = "CoinConnector" . ucwords($connector);
    if (class_exists($connector)) {
        return new $connector();
    } else {
        throw new InvalidConnectorType($connector);
    }
}

以下文件夹结构:

/app
    /Plugin
        /CoinConnector
             /Lib
                 CoinConnectorFactory.php
                 CoinConnectorGogulski.php

问题是,我将build方法作为$connector变量传递给此值gogulski但是当进入class_exists时这样:

class_exists('CoinConnectorGogulski')

永远不要找到类(与文件名称相同)并始终抛出异常。

只有在检查是否存在类之前我才添加此行CakePHP能够找到类

include_once APP . 'Plugin' . DS . 'CoinConnector' . DS . 'Lib' . DS . $connector . '.php';

1 个答案:

答案 0 :(得分:0)

这就是我最后解决问题的方法:

public static function build($connector) {
    $connector = "CoinConnector" . ucwords($connector);
    App::uses($connector, 'CoinConnector.Lib');
    if (class_exists($connector)) {
        return new $connector();
    } else {
        throw new InvalidConnectorType($connector);
    }
}