国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解PHP對構(gòu)造方法的識別

開發(fā) 后端
眾所周知,由于歷史原因,PHP之前是使用類名作為構(gòu)造函數(shù),在PHP 5中引入的新的構(gòu)造函數(shù)__construct,文章將介紹PHP對構(gòu)造方法的識別。

眾所周知,由于歷史原因,PHP之前是使用類名作為構(gòu)造函數(shù),在PHP 5中引入的新的構(gòu)造函數(shù)__construct。為了實(shí)現(xiàn)向后兼容性,如果PHP 5在類中找不到 __construct() 函數(shù),它就會嘗試尋找舊式的構(gòu)造函數(shù),也就是和類同名的函數(shù)。

因此唯一會產(chǎn)生兼容性問題的情況是:類中已有一個(gè)名為 __construct() 的方法,但它卻又不是構(gòu)造函數(shù)。有如下一段代碼:

  1. <?php 
  2. class Foo {  
  3.    
  4.     public function Foo() {  
  5.    
  6.     }  
  7.    
  8.     private function __construct() {  
  9.    
  10.     }  
  11. }  
  12.    
  13. new Foo();  
  14. die();  

此時(shí),輸出為:

  1. Fatal error: Call to private Foo::__construct() from invalid context

此時(shí),PHP識別出來的構(gòu)造函數(shù)是__construct,因?yàn)槭莗rivate,于是在外部調(diào)用出錯(cuò)。好吧,我們從PHP的C源碼中查找一下原因吧。從SQL的擴(kuò)展類中直接查找類的定義開始:

  1. spl_iterators.c 3228行 REGISTER_SPL_STD_CLASS_EX(IteratorIterator, spl_dual_it_new, spl_funcs_IteratorIterator);  
  2. ///spl_functions.h 31行  
  3. #define REGISTER_SPL_STD_CLASS_EX(class_name, obj_ctor, funcs) \  
  4.  spl_register_std_class(&spl_ce_ ## class_name, # class_name, obj_ctor, funcs TSRMLS_CC);  
  5. //spl_functions.c 41行  
  6. PHPAPI void spl_register_std_class(zend_class_entry ** ppce, char * class_name, void * obj_ctor, const zend_function_entry * function_list TSRMLS_DC)  
  7.    
  8. //spl_functions.c 2235行  
  9. ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *orig_class_entry TSRMLS_DC) /* {{{ */  
  10. //調(diào)用do_register_internal_class函數(shù)  
  11.    
  12. //zend_API.c 2169行  
  13. static zend_class_entry *do_register_internal_class(zend_class_entry *orig_class_entry, zend_uint ce_flags TSRMLS_DC) /* {{{ */  
  14. //調(diào)用  
  15. zend_register_functions(class_entry, class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC);  
  16.    
  17. //zend_API.c 1795行  
  18. /* Look for ctor, dtor, clone  
  19. * If it's an old-style constructor, store it only if we don't have  
  20. * a constructor already.  
  21. */  
  22. if ((fname_len == class_name_len) && !memcmp(lowercase_name, lc_class_name, class_name_len+1) && !ctor) {  
  23.  ctor = reg_function;  
  24. } else if ((fname_len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME))) {  
  25.  ctor = reg_function;  
  26. }   
  27.    
  28. scope->constructor = ctor; //在1961行 確認(rèn)構(gòu)造函數(shù)  

 

以上代碼為PHP 5.3.0版本

從以上跟蹤流程來看,程序在注冊所有函數(shù)時(shí),如果存在__construct(即ZEND_CONSTRUCTOR_FUNC_NAME)時(shí),會覆蓋class_name(類名)的構(gòu)造函數(shù),使其作為常規(guī)的成員函數(shù)存在。如下所示代碼:

  1. <?php 
  2. class Foo {  
  3.    
  4.     public function Foo() {  
  5.         echo 'Foo';  
  6.     }  
  7.    
  8.     public function __construct() {  
  9.         echo '__construct';  
  10.     }  
  11. }  
  12.    
  13. $foo = new Foo();  
  14. $foo->Foo(); 

對于在前面的示例中的報(bào)錯(cuò),我們可以在zend/zend_object_handlers.c 1057行ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC)找到出處。

【編輯推薦】

  1. PHP 5魔術(shù)方法應(yīng)用淺析
  2. 改善PHP開發(fā)方式的5種方法
  3. ***PHP網(wǎng)站架構(gòu)工具箱 
責(zé)任編輯:王曉東 來源: PHPPAN
相關(guān)推薦

2009-12-02 16:04:44

PHP fsockop

2009-11-16 16:54:00

PHP構(gòu)造函數(shù)

2009-09-09 11:24:46

PHP實(shí)現(xiàn)MVC

2009-11-30 17:43:54

PHP split()

2009-03-04 13:10:41

SQL語句INSERTDELETE

2009-12-03 18:23:23

2009-11-17 09:02:36

PHP數(shù)組賦值

2009-11-23 14:44:22

PHP 5.0構(gòu)造函數(shù)

2011-05-16 10:35:02

jQuery

2016-10-27 15:58:35

魔術(shù)方法PHP

2009-11-10 10:32:42

2009-11-23 14:30:07

PHP5.0對象模型

2009-12-04 10:19:11

PHP hack

2020-10-24 14:10:26

PHP網(wǎng)絡(luò)安全人機(jī)識別

2016-12-01 19:51:03

PHP魔術(shù)詳解

2017-07-10 09:21:17

Oracle構(gòu)造序列

2009-11-18 12:31:19

PHP構(gòu)造函數(shù)

2009-11-16 16:59:03

PHP構(gòu)造函數(shù)

2009-12-10 13:37:16

PHP parent

2011-08-17 10:58:59

Objective-C構(gòu)造函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产自产高清不卡| 久久久精品一区二区| 欧美日韩大尺度| 麻豆一区二区三区| 国产精品一区二区三区不卡 | 久久影院资源网| 在线欧美三级| 在线欧美日韩国产| 一级毛片在线| 自拍偷自拍亚洲精品播放| 国产成人a亚洲精v品无码| 成人午夜av电影| 亚洲免费视频播放| 精品一区二区在线播放| 日韩欧美一区二区视频在线播放 | 在线一级视频| 亚洲午夜久久久久久久久电影院| www亚洲成人| 国产亚洲精久久久久久| 欧美xxxxx在线视频| 国产喷白浆一区二区三区| 国产自偷自偷免费一区| 国产精品―色哟哟| 国产天堂av| 亚洲成在人线在线播放| 小草av在线播放| 欧美性生活大片视频| 麻豆91在线| 亚洲国内精品在线| 日韩在线影院| 久久综合免费视频影院| 精品国产影院| 91夜夜揉人人捏人人添红杏| 国产综合婷婷| 无码免费一区二区三区免费播放 | 亚洲r级在线观看| 亚洲精品在线二区| 一区二区不卡在线视频 午夜欧美不卡'| 老司机精品视频网站| 中文字幕中文字幕99| proumb性欧美在线观看| 韩国视频一区二区三区| 亚洲乱码中文字幕综合| 青青草在线播放| 日韩精品最新网址| 成人日韩在线观看| 久久久久国产精品免费| 久久麻豆精品| 神马影院一区二区三区| 9人人澡人人爽人人精品| 国产成人手机视频| 一区二区三区蜜桃网| 日本激情在线观看| 深夜精品寂寞黄网站在线观看| av成人综合| 国产精品国产亚洲精品看不卡15| 激情久久五月天| 天天色综合6| 色视频一区二区| 国产超碰精品| 欧美一区二区视频97| 国产日韩1区| www.99av.com| 91麻豆精品国产综合久久久久久 | 日韩欧美一二三四区| 亚洲成人看片| 国产日本欧美一区二区三区在线| 亚洲理伦在线| 国产午夜大地久久| 色综合中文字幕国产| 国产成人精品一区二三区在线观看| 26uuu另类亚洲欧美日本一 | 密臀av在线| 日本免费在线精品| 人人爽香蕉精品| 玖玖在线免费视频| 亚洲美女www午夜| 日韩精品网站| 欧美成人高潮一二区在线看| 欧美无砖专区一中文字| 中文字幕日韩在线| 综合国产精品久久久| 欧美三级免费观看| 亚洲视频一起| 日本成人性视频| 在线视频欧美区| 波多野结衣欧美| 国产又黄又爽免费视频| 欧美日韩国产在线看| 亚洲小说春色综合另类电影| 一区二区冒白浆视频| 日韩欧美黄色动漫| 日本欧美韩国国产| 国产白丝袜美女久久久久| 欧美一区二区精美| 91综合视频| 中文字幕国产传媒| 亚洲九九九在线观看| 一本久道久久综合婷婷鲸鱼| 免费观看的av网站| 欧美激情图片区| 国产aⅴ综合色| 免费电影视频在线看| 国产福利久久精品| 午夜日韩在线观看| 偷拍视屏一区| 老熟妇仑乱视频一区二区| 国产视频精品va久久久久久| 久久久精品性| 欧美另类极品| 国产精品久久波多野结衣| 天天色天天操综合| 精品国产一区探花在线观看| 成人www视频网站免费观看| 日韩中文字幕在线观看| 九九国产精品视频| 中文av资源在线| 欧美一区二区三区精美影视| 在线亚洲免费视频| 外国成人免费视频| 性史性dvd影片农村毛片| 久久人91精品久久久久久不卡| www.日韩精品| 日韩子在线观看| 日韩美女一区二区三区在线观看| 99自拍视频在线观看| 国产在线精品一区二区三区| 欧美视频不卡中文| 亚洲澳门在线| 中文字幕第80页| 91国在线精品国内播放| 成人看片视频| 你懂的av在线| 里番在线观看网站| 台湾天天综合人成在线| 在线中文字幕视频| 国产中文字幕乱人伦在线观看| 国产视频999| 日韩电影中文字幕在线| 欧美性色欧美a在线播放| 午夜影院久久久| 黄色成人在线播放| 日韩和欧美一区二区| 国产一区二区区别| 国产精品99久久免费| 丝袜在线观看| 在线观看h片| 日本wwwwww| 激情视频网址| eeuss影院www在线播放| 中文在线√天堂| 亚洲天堂资源| 欧美理论电影| av中文在线资源| 国产激情视频在线看| 欧美videossex另类| 国产一区 二区| 欧美色女视频| 麻豆免费在线视频| 日日夜夜一区| 日韩成人激情| 欧美日韩中字| 欧美综合久久| 视频一区日韩精品| 欧美色图麻豆| 亚洲黄网站在线观看| 少妇久久久久久| 国产精品欧美一区二区| 国产成人精品自拍| 四虎成人免费在线| 国产免费av一区二区三区| 模特精品在线| 久久er99热精品一区二区| 国产69精品久久久久毛片| 26uuu精品一区二区在线观看| 国产欧美精品一区二区色综合| 亚洲成a人片在线观看中文| 欧美精品一二三区| 制服丝袜在线91| 亚洲最新av网址| 国产精品久久久久久搜索 | 亚洲精品二区| 羞羞的视频免费| 中文字幕在线三区| 视频在线一区| 一区二区在线| 亚洲黄色片在线观看| 国产成人高清激情视频在线观看 | 乱馆动漫1~6集在线观看| 少妇精品视频在线观看| 亚洲丁香日韩| 欧美国产另类| 精品一区二区在线观看| 色综合久久中文综合久久牛| 欧美国产日韩精品| 亚洲精品久久区二区三区蜜桃臀 | 九一久久久久久| 欧美麻豆精品久久久久久| 日韩美女在线观看一区| 欧美亚洲黄色片|