= 4) { $arrClassNamePartTemp = $arrClassNamePart; // FIXME クラスファイルのディレクトリ命名が変。変な現状に合わせて強引な処理をしてる。 $arrClassNamePartTemp[1] = $arrClassNamePartTemp[1] . '_extends'; $classpath .= strtolower(implode('/', array_slice($arrClassNamePartTemp, 1, -2))) . '/'; } elseif ($arrClassNamePart[0] === 'SC' && $is_ex === false && $count >= 3) { $classpath .= strtolower(implode('/', array_slice($arrClassNamePart, 1, -1))) . '/'; } elseif ($arrClassNamePart[0] === 'SC') { // 処理なし } // PEAR用 // FIXME トリッキー else { $classpath = ''; $class = str_replace('_', '/', $class); } $classpath .= "$class.php"; // プラグイン向けフックポイント // MEMO: プラグインのローダーがDB接続を必要とするため、SC_Queryがロードされた後のみ呼び出される。 // プラグイン情報のキャッシュ化が行われれば、全部にフックさせることを可能に? $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(true); if (is_object($objPlugin)) { // 元の設定を一時保存 $plugin_class = $class; $plugin_classpath = $classpath; $objPlugin->doAction('loadClassFileChange', array(&$plugin_class, &$plugin_classpath)); // FIXME: トリッキーな処理で _Ex ファイルを無視しないようにする(無視するとユーザーカスタマイズで分かりにくい) // SC_XXXX_Ex がロードされる場合にextendsのchainを // SC_XXXX_Ex -> SC_XXXX から、 SC_XXXX_Ex -> $class (-> SC_XXXX) と変える。 // そうでない場合は、直接置き換えと想定して帰ってきたクラスをロードする if ($plugin_class !== $class) { if ($is_ex) { // Ex ファイルへのフックの場合のみチェイン変更する。 $exp = "/(class[ ]+{$class}[ ]+extends +)[a-zA-Z_\-]+( *{)/"; $replace = '$1' . $plugin_class . '$2'; $base_class_str = file_get_contents($classpath); $base_class_str = str_replace(array(''), '', $base_class_str); $base_class_str = preg_replace($exp, $replace, $base_class_str, 1); include $plugin_classpath; eval($base_class_str); return; } else { include $plugin_classpath; } } } include $classpath; } }