Changeset 21742


Ignore:
Timestamp:
2012/04/14 22:20:48 (12 years ago)
Author:
AMUAMU
Message:

#1692 (プラグイン機能) SC_系のクラス読込をプラグインがフックして、別のクラスファイルを使えるようにする修正。詳しくはプラグイン仕様参照。

Location:
branches/version-2_12-dev/data
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/app_initial.php

    r21580 r21742  
    3737} 
    3838 
     39// クラスのオートローディングに対応するフックを入れるために、ここに入れる必要あり 
     40require_once(CLASS_EX_REALDIR . 'helper_extends/SC_Helper_Plugin_Ex.php'); 
     41 
    3942// クラスのオートローディングを定義する 
    40 setClassAutoloader(); 
     43require_once(CLASS_EX_REALDIR . '/SC_ClassAutoloader_Ex.php'); 
     44spl_autoload_register(array('SC_ClassAutoloader_Ex', 'autoload')); 
    4145 
    4246SC_Helper_HandleError_Ex::load(); 
     
    4650$objInit->init(); 
    4751 
    48  
    49 /** 
    50  * クラスのオートローディングを定義する 
    51  * 
    52  * 関数なので、このように囲う必要はないが、メインの処理フローを分かりやすくするため定義した。 
    53  * @return void 
    54  */ 
    55 function setClassAutoloader() { 
    56     /** 
    57      * クラスのオートローディング本体 
    58      * 
    59      * LC_* には対応していない。 
    60      * @return void 
    61      */ 
    62     function __autoload($class) { 
    63         $arrClassNamePart = explode('_', $class); 
    64         $is_ex = end($arrClassNamePart) === 'Ex'; 
    65         $count = count($arrClassNamePart); 
    66         $classpath = $is_ex ? CLASS_EX_REALDIR : CLASS_REALDIR; 
    67  
    68         if (($arrClassNamePart[0] === 'GC' || $arrClassNamePart[0] === 'SC') && $arrClassNamePart[1] === 'Utils') { 
    69             $classpath .= $is_ex ? 'util_extends/' : 'util/'; 
    70         } 
    71         elseif ($arrClassNamePart[0] === 'SC' && $is_ex === true && $count >= 4) { 
    72             $arrClassNamePartTemp = $arrClassNamePart; 
    73             // FIXME クラスファイルのディレクトリ命名が変。変な現状に合わせて強引な処理をしてる。 
    74             $arrClassNamePartTemp[1] = $arrClassNamePartTemp[1] . '_extends'; 
    75             $classpath .= strtolower(implode('/', array_slice($arrClassNamePartTemp, 1, -2))) . '/'; 
    76         } 
    77         elseif ($arrClassNamePart[0] === 'SC' && $is_ex === false && $count >= 3) { 
    78             $classpath .= strtolower(implode('/', array_slice($arrClassNamePart, 1, -1))) . '/'; 
    79         } 
    80         elseif ($arrClassNamePart[0] === 'SC') { 
    81             // 処理なし 
    82         } 
    83         // PEAR用 
    84         // FIXME トリッキー 
    85         else { 
    86             $classpath = ''; 
    87             $class = str_replace('_', '/', $class); 
    88         } 
    89  
    90         $classpath .= "$class.php"; 
    91         include $classpath; 
    92     } 
    93 } 
Note: See TracChangeset for help on using the changeset viewer.