久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

prestashop商城系統(tǒng)autoload自動載入類

 sumi2005 2014-05-04
prestashop更新1.4后,,系統(tǒng)文件結構發(fā)生比較大的變化,,
其中一項就是關于核心類的定義變化,,以前在1.4以前,,在classes目錄下,,定義的類,,都是以class Address{}
這樣的類型存在,,而今,,在classes目錄下,,定義的核心類,則都是以Core結尾,,比如原來的Address 類,,變成了 AddressCore類,
但是,,為什么在我們使用時候,,卻依然可以直接

  1. $address = new Address();
復制代碼

這樣來調用呢,那么,,請看完小蝦今天的PS解說之__autoload(),培析PS如何載入類.
文件路徑: config/autoload.php

  1. function __autoload($className)
  2. {
  3. //如果smarty自動載入函數(shù)存在,,且這個類為smarty本身的類或者smarty的插件類,則直接返回true
  4. //詳情可查看smartyAutoload 這個函數(shù)的過程
  5. if (function_exists('smartyAutoload') AND smartyAutoload($className))
  6. return true;

  7. //替換類名的空格 ,,char(0) ASSIC碼中字符表示空格,,代碼表示為null
  8. $className = str_replace(chr(0), '', $className);
  9. //定義基類目錄
  10. $classDir = dirname(__FILE__).'/../classes/';
  11. //定義擴張類目錄
  12. $overrideDir = dirname(__FILE__).'/../override/classes/';
  13. //判斷擴張文件是否存在
  14. $file_in_override = file_exists($overrideDir.$className.'.php');
  15. //判斷基類文件是否存在
  16. $file_in_classes = file_exists($classDir.$className.'.php');

  17. //如果類名最后4位為Core,則直接導入這個基類類文件
  18. //比如,你可直接 實例 new OrderCore();
  19. if (substr($className, -4) == 'Core')
  20. require_once($classDir.substr($className, 0, -4).'.php');
  21. else
  22. {
  23. //如是擴張文件和基類文件都存在,,那么同時導入這兩個文件,。
  24. if ($file_in_override && $file_in_classes)
  25. {
  26. require_once($classDir.str_replace(chr(0), '', $className).'.php');
  27. require_once($overrideDir.$className.'.php');
  28. }//如果擴張文件不存在,只存在基類文件則
  29. elseif (!$file_in_override && $file_in_classes)
  30. {
  31. //導入基類文件
  32. require_once($classDir.str_replace(chr(0), '', $className).'.php');
  33. //獲取基類文件的反射API信息
  34. //interface_exists($className, false) or class_exists($className, false)) ? '' : 'Core')
  35. //上面這一句,,接口是否存在,,或者類存在,也就是classes目錄下,,可直接定義類名為 classes Myfoo{},,如果條件為true,則為空,否則 在類名后面添加一個Core
  36. //也就是 $classInfos = new ReflectionClass($className.'Core');
  37. $classInfos = new ReflectionClass($className.((interface_exists($className, false) or class_exists($className, false)) ? '' : 'Core'));
  38. //如果這不一個接口,而且最后類名最后4位為Core,則執(zhí)行
  39. //($classInfos->isAbstract() ? 'abstract ' : '').'class '.$className.' extends '.$className.'Core {}'
  40. //類是否為一個抽象類,,如果,,則聲明一個臨時的抽象類 abstract class $className extends $className.'Core' {}
  41. //eval執(zhí)行這段字符串
  42. if (!$classInfos->isInterface() && substr($classInfos->name, -4) == 'Core')
  43. eval(($classInfos->isAbstract() ? 'abstract ' : '').'class '.$className.' extends '.$className.'Core {}');
  44. }//如果只存在擴張類,不存在基類,,那么,,直接導入擴展類
  45. elseif ($file_in_override && !$file_in_classes)
  46. require_once($overrideDir.$className.'.php');
  47. }
  48. }
復制代碼

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多