smarty3 autoload note

Php 有autoload 的功能簡單來說就是只要寫了個__autoload($class_name)之後,佢會當你嘗試create 一些class時佢會訧下行這個function 你設定了的include file

以下是我的__autoload class

 function __autoload($class_name) {
   global $classesDir;
  
   foreach($classesDir as $dir){
       if (file_exists($dir . $class_name . '.php')) {
          include $dir . $class_name . '.php';
       }
   }
}

不過如果你自己define 了這個__autoload之後再加上smarty3時行template 是有機會出現Fatal error: Class 'Smarty_Internal_TemplateCompilerBase' not found in smarty_internal_smartytemplatecompiler.php on line 23 的錯誤呢!

最簡單的簡決方法就係改用spl_autoload_register 把自己的autoload function 加上去, 也就是說把原本的code 加為如下,這樣就可以解決那個Smarty的fatal error了.

function __autoload($class_name) {
   global $classesDir;
  
   foreach($classesDir as $dir){
       if (file_exists($dir . $class_name . '.php')) {
          include $dir . $class_name . '.php';
       }
   }
}

spl_autoload_register('my_autoload');

0 回應:

Post a Comment