我有以下代码(尝试模拟工厂模式):
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';
答案 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);
}
}