/**
  * Returns an array of CONSTANT_NAME => contents for a given class
  * @param string $className
  * @return string[]
  */
 public static function constants($className)
 {
     return constants($className);
 }
Example #2
0
/**
 * フレームワークの初期化処理(内部関数)
 * @param mixed TRUEの時は、読み込み済みのパッケージ情報を返す stringの時はConfigureクラス名としてConfigureクラスに対してのinitを処理する
 */
function _initFramework($argment = NULL)
{
    // 読み込み済みのパッケージ定義格納用
    static $pkgConfXML = NULL;
    // 処理済みのConfigureクラス名格納用
    static $argmentKeys = NULL;
    if (TRUE === $argment && NULL !== $pkgConfXML) {
        // 敢えて直ぐ返す
        return $pkgConfXML;
    }
    if (!function_exists('_loadPackage')) {
        /**
         * ローカル関数:指定されたパッケージのロード処理
         * ※ただ手続きだと見難いので関数化しただけ
         */
        function _loadPackage($pkgConfXMLPath, &$pkgConfXML)
        {
            if (is_array($pkgConfXMLPath)) {
                if (count($pkgConfXMLPath) > 0) {
                    // 再帰処理
                    foreach ($pkgConfXMLPath as $key => $path) {
                        _loadPackage($path, $pkgConfXML);
                    }
                }
            } else {
                if (file_exists($pkgConfXMLPath)) {
                    if (NULL === $pkgConfXML) {
                        // 配列に初期化
                        $pkgConfXML = array();
                    }
                    // XXX 新しいパッケージは常に配列の先頭に!
                    array_unshift($pkgConfXML, array('time' => filemtime($pkgConfXMLPath), 'dom' => simplexml_load_file($pkgConfXMLPath, NULL, LIBXML_NOCDATA)));
                    // defaulのauto節を処理する
                    if (count($pkgConfXML[0]['dom']->default->auto) > 0) {
                        foreach ($pkgConfXML[0]['dom']->default->auto->children() as $autoLoadModule) {
                            loadModule($autoLoadModule);
                        }
                    }
                }
            }
        }
    }
    // デフォルトのフレームワークのpackageXMLを探して全て読み込む
    if (NULL === $pkgConfXML) {
        // 「package.xml」と言うファイルがこのファイルと同じ階層にあったら読み込む
        _loadPackage(dirname(__FILE__) . '/package.xml', $pkgConfXML);
        // このファイルと同じ名前で拡張子が「.package.xml」のファイルがこのファイルと同じ階層にあったら読み込む
        _loadPackage(dirname(__FILE__) . '/' . strtoupper(substr(basename(__FILE__), 0, strpos(basename(__FILE__), '.'))) . '.package.xml', $pkgConfXML);
        // 「.*PACKAGE_CONFIG_XML_PATH.*」に該当するConfigureクラス定数定義されたパスのファイルがあったら全て読み込む
        _loadPackage(Configure::constant('.*PACKAGE_CONFIG_XML_PATH.*', TRUE), $pkgConfXML);
        // Configureクラス定義のパッケージは全て読み込み済みとする
        $argmentKeys[] = 'Configure';
        // 「.*PACKAGE_CONFIG_XML_PATH.*」に該当する通常定数定義されたパスのファイルがあったら全て読み込む
        _loadPackage(constants('.*PACKAGE_CONFIG_XML_PATH.*', TRUE), $pkgConfXML);
        // デフォルトでパッケージが一個も見つからなかったらエラー
        if (NULL === $pkgConfXML) {
            _systemError('not found package.xml  !! Please check default path config.' . PHP_EOL . str_replace(PATH_SEPARATOR, PHP_EOL, get_include_path()));
        }
    }
    // 渡されたConfigureクラス名のConfigureクラスをinit処理して$pkgConfXMLのリフレッシュする
    if (NULL !== $argment && TRUE !== $argment && is_string($argment)) {
        // 処理済みでは無いかどうか
        // 更に、クラスが存在するかどうか
        if (!in_array($argment, $argmentKeys) && class_exists($argment, FALSE)) {
            // 「.*PACKAGE_CONFIG_XML_PATH.*」に該当するConfigureクラス定数定義されたパスのファイルがあったら全て読み込む
            _loadPackage($argment::constant('.*PACKAGE_CONFIG_XML_PATH.*', TRUE), $pkgConfXML);
            // 2度処理しないように追加しておく
            $argmentKeys[] = $argment;
        }
    }
    if (TRUE === $argment) {
        // TRUEの時は処理後のパッケージ定義を全て返す
        return $pkgConfXML;
    }
}