SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
了解PHP内核
12年10月29日星期⼀一
我是……
                Er、T0ny
                中心的学生
                写PHP的程序员
                喜欢各种折腾



12年10月29日星期⼀一
PHP代码是如何被执行的?




12年10月29日星期⼀一
C代码         PHP代码

                gcc -o xxx    ???


                 $> xxx

12年10月29日星期⼀一
PHP的生命周期




12年10月29日星期⼀一
mod_php     cli         cgi/fastcgi ...

                                                                       SAPI



                                       PHP API
                                          streams, output, etc.


                 PHP (core)
                                      Extensions
                                       mysql , standard library, etc




                Zend API      Zend Extension API


                            Zend Engine
12年10月29日星期⼀一
$ php test.php

                           Call Each extension’s MINIT

                                 Request test.php

                           Call Each extension’s RINIT

                                    Execute test.php

                        Call Each extension’s RSHUTDOWN

                         Finish cleaning up after test.php

                        Call Each extension’s MSHUTDOWN

                Terminate php




12年10月29日星期⼀一
PHP脚本的执行




12年10月29日星期⼀一
PHP内核
      <?php
         echo “hi”;     词法分析
      ?>
                        语法分析


                       Zend Engine
                      (执行 opCodes)
                hi



12年10月29日星期⼀一
词法分析
                Lex/Flex/re2c



12年10月29日星期⼀一
array (
                   array (
 <?php               0 => 368, // #define T_OPEN_TAG 368
                     1 => '<?php',
    echo $hi;        2 => 1, // LINE NO
 ?>                ),
                   array (
                     0 => 316, // #define T_ECHO 316
                     1 => 'echo',
                     2 => 2,
                   ),
                   array (
                     0 => 371, // #define T_WHITESPACE 371
                     1 => ' ',
                     2 => 2,
 token_get_all     ),
                   array (
                     0 => 309, // #define T_VARIABLE 309
                     1 => '$haha',
                     2 => 2,
                   ),
                   4 => ';',
                 )
                 @see Zend/zend_language_parser.c
12年10月29日星期⼀一
<?php      T_OPEN_TAG   ?>       T_CLOSE_TAG




                $var   T_VARIABLE    if         T_IF




          function     T_FUNCTION   for        T_FOR




                echo     T_ECHO     exit       T_EXIT




                        123 tokens         php5.3

12年10月29日星期⼀一
语法分析
                Yacc/Bison



12年10月29日星期⼀一
T_ECHO echo_expr_list ';'



       echo_expr_list:
              echo_expr_list ',' expr { ... }
          |   expr                    { ... }



      { ... }

                     zend_do_echo()
12年10月29日星期⼀一
void zend_do_echo(const znode *arg TSRMLS_DC)
 {
    zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);

      opline->opcode = ZEND_ECHO;
      opline->op1 = *arg;
      SET_UNUSED(opline->op2);
 }

 @see Zend/zend_compile.c




                  zend_op 出场!


12年10月29日星期⼀一
struct _zend_op {
       // 执行该opcode时调用的处理函数
       opcode_handler_t handler;
       znode result;
       znode op1;
       znode op2;
       ulong extended_value;
       uint lineno;
       zend_uchar opcode; // opcode代码
    };




12年10月29日星期⼀一
opcodes的执行




12年10月29日星期⼀一
switch           call            goto


    switch (opcode){                    switch (opcode){
     case ZEND_ADD:                         case ZEND_ADD:
     break;                                   goto zend_add:
     case ZEND_CALL:                          break;
     break;                             ...
                                        zend_add:



                         call ZEND_ADD_HANDLER()



12年10月29日星期⼀一
opcode * 25
          + zend_vm_decode[op->op1.op_type] * 5
          + zend_vm_decode[op->op2.op_type];



          static const opcode_handler_t labels[]




                3851 indexs           php5.3


12年10月29日星期⼀一
zend_op



                op_array   zend_op



                           zend_op


                            ...



12年10月29日星期⼀一
symbol_talble

                *active_op_array       *active_symbol_talble


                op_array1           op_array2           ...

           execute_data            execute_data         ...




12年10月29日星期⼀一
让我们再来⼀一次……




12年10月29日星期⼀一
.php           SAPI             Compiler
       • Firefox/Chrome   • Apache/Nginx       • 词法分析
       • Console          • CLI                • 语法分析
                          • Embed




                             Executor          OPCODES
                Output                         • Main Script
                Buffer    • Switch/Call/Goto
                                               • Function Table
                          •Console
                                               • Class Table




12年10月29日星期⼀一
Finally……




12年10月29日星期⼀一
<?php
                	$a = 3;
                	$b = 5;

                	if($a = 5 || $b = 7) {
                	        $a++;
                	        $b++;
                	}

                     $a=? $b=?
12年10月29日星期⼀一
<?php
                	$a = 3;
                	$b = 5;

                	if( $a = 5 || $b = 7
                     $a                 ) {
                	        $a++;
                	        $b++;
                	}

            答案:
            Zend/zend_language_parser.y
12年10月29日星期⼀一
关于TIPI


                www.php-internal.com




12年10月29日星期⼀一
reeze   er




                        pan




12年10月29日星期⼀一
Q&A



12年10月29日星期⼀一
谢 谢

                欢迎联系我:

                QQ:487223*

                email: er@zhangabc.com

                gtalk: er@zhangabc.com

                blog: www.zhangabc.com



12年10月29日星期⼀一

Weitere ähnliche Inhalte

Was ist angesagt?

Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 
從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛John L Chen
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器鍾誠 陳鍾誠
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集艾鍗科技
 
Golangintro
GolangintroGolangintro
Golangintro理 傅
 
C程式-陣列與指標
C程式-陣列與指標C程式-陣列與指標
C程式-陣列與指標艾鍗科技
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集shademoon
 
Groovy简介
Groovy简介Groovy简介
Groovy简介profeter
 
Chapter 3 basic syntax and operator
Chapter 3  basic syntax and operatorChapter 3  basic syntax and operator
Chapter 3 basic syntax and operatorhhliu
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門吳錫修 (ShyiShiou Wu)
 
密碼學漏洞與他們的產地 Crypto fail and where to find them
密碼學漏洞與他們的產地   Crypto fail and where to find them密碼學漏洞與他們的產地   Crypto fail and where to find them
密碼學漏洞與他們的產地 Crypto fail and where to find themJohn L Chen
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍gowell
 
系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作鍾誠 陳鍾誠
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Trainingbeijing.josh
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器鍾誠 陳鍾誠
 
JavaScript现代化排错实践
JavaScript现代化排错实践JavaScript现代化排错实践
JavaScript现代化排错实践jeffz
 
Java script closures
Java script closuresJava script closures
Java script closuresskywalker1114
 

Was ist angesagt? (19)

Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集
 
nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言
 
Golangintro
GolangintroGolangintro
Golangintro
 
C程式-陣列與指標
C程式-陣列與指標C程式-陣列與指標
C程式-陣列與指標
 
第4章函数
第4章函数第4章函数
第4章函数
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集
 
Groovy简介
Groovy简介Groovy简介
Groovy简介
 
Chapter 3 basic syntax and operator
Chapter 3  basic syntax and operatorChapter 3  basic syntax and operator
Chapter 3 basic syntax and operator
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門
 
密碼學漏洞與他們的產地 Crypto fail and where to find them
密碼學漏洞與他們的產地   Crypto fail and where to find them密碼學漏洞與他們的產地   Crypto fail and where to find them
密碼學漏洞與他們的產地 Crypto fail and where to find them
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍
 
系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Training
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器
 
JavaScript现代化排错实践
JavaScript现代化排错实践JavaScript现代化排错实践
JavaScript现代化排错实践
 
Java script closures
Java script closuresJava script closures
Java script closures
 

Andere mochten auch

Los bosques
Los bosquesLos bosques
Los bosquesiesMola
 
What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...Richard McIntyre
 
Bai3 oxitaxitl1
Bai3 oxitaxitl1Bai3 oxitaxitl1
Bai3 oxitaxitl1vjt_chjen
 
Sambahang kristiano sa Gulod
Sambahang kristiano sa GulodSambahang kristiano sa Gulod
Sambahang kristiano sa GulodSamuel Curit
 
Microsoft word thi bd đh hoa-485
Microsoft word   thi bd đh hoa-485Microsoft word   thi bd đh hoa-485
Microsoft word thi bd đh hoa-485vjt_chjen
 
апкс 2011 04_verilog
апкс 2011 04_verilogапкс 2011 04_verilog
апкс 2011 04_verilogIrina Hahanova
 
2c; photosynthesis
2c; photosynthesis2c; photosynthesis
2c; photosynthesiskwiley0019
 
LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011Anil Nayar
 
Primitive life photos
Primitive life photosPrimitive life photos
Primitive life photoskwiley0019
 
The little ice age
The little ice ageThe little ice age
The little ice age000175031
 
Welcome to respect campaign
Welcome to respect campaignWelcome to respect campaign
Welcome to respect campaignGreg Martinez
 
Hello,my nameis.lawlor
Hello,my nameis.lawlorHello,my nameis.lawlor
Hello,my nameis.lawlortnlawlor
 
3b; cell reproduction
3b; cell reproduction3b; cell reproduction
3b; cell reproductionkwiley0019
 
My Favourite pastime
My Favourite pastimeMy Favourite pastime
My Favourite pastimesaci0003
 
Howard Guardian
Howard GuardianHoward Guardian
Howard Guardianace19855
 

Andere mochten auch (20)

Los bosques
Los bosquesLos bosques
Los bosques
 
What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...
 
Bai3 oxitaxitl1
Bai3 oxitaxitl1Bai3 oxitaxitl1
Bai3 oxitaxitl1
 
Sambahang kristiano sa Gulod
Sambahang kristiano sa GulodSambahang kristiano sa Gulod
Sambahang kristiano sa Gulod
 
Microsoft word thi bd đh hoa-485
Microsoft word   thi bd đh hoa-485Microsoft word   thi bd đh hoa-485
Microsoft word thi bd đh hoa-485
 
апкс 2011 04_verilog
апкс 2011 04_verilogапкс 2011 04_verilog
апкс 2011 04_verilog
 
2c; photosynthesis
2c; photosynthesis2c; photosynthesis
2c; photosynthesis
 
LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011LAW OF ATTRACTION - Corp Intero 2011
LAW OF ATTRACTION - Corp Intero 2011
 
Primitive life photos
Primitive life photosPrimitive life photos
Primitive life photos
 
The little ice age
The little ice ageThe little ice age
The little ice age
 
Welcome to respect campaign
Welcome to respect campaignWelcome to respect campaign
Welcome to respect campaign
 
Kalendar
KalendarKalendar
Kalendar
 
Hello,my nameis.lawlor
Hello,my nameis.lawlorHello,my nameis.lawlor
Hello,my nameis.lawlor
 
Yntercaran
YntercaranYntercaran
Yntercaran
 
Աշոտ
ԱշոտԱշոտ
Աշոտ
 
Moh a
Moh aMoh a
Moh a
 
3b; cell reproduction
3b; cell reproduction3b; cell reproduction
3b; cell reproduction
 
My Favourite pastime
My Favourite pastimeMy Favourite pastime
My Favourite pastime
 
Nakaz №899
Nakaz №899Nakaz №899
Nakaz №899
 
Howard Guardian
Howard GuardianHoward Guardian
Howard Guardian
 

Ähnlich wie 了解Php内核

Juicer - A fast template engine using javascript
Juicer - A fast template engine using javascriptJuicer - A fast template engine using javascript
Juicer - A fast template engine using javascriptpaulguo
 
iOs app 101
iOs app 101iOs app 101
iOs app 101Tom Sun
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 
数据处理算法设计要点
数据处理算法设计要点数据处理算法设计要点
数据处理算法设计要点thinkinlamp
 
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)Jian-Kai Wang
 
iOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techpartyiOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techpartyGump Law
 
程式人雜誌 -- 2015 年9月號
程式人雜誌 -- 2015 年9月號程式人雜誌 -- 2015 年9月號
程式人雜誌 -- 2015 年9月號鍾誠 陳鍾誠
 
Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Mu-Fan Teng
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitaskingyarshure Kong
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术hoopchina
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 
dbug in mysql
dbug in mysqldbug in mysql
dbug in mysqlTim Chou
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務台灣資料科學年會
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Chun-Min Chang
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in RChun-Ming Chang
 
AngularJS Sharing
AngularJS SharingAngularJS Sharing
AngularJS SharingTom Chen
 

Ähnlich wie 了解Php内核 (20)

Juicer - A fast template engine using javascript
Juicer - A fast template engine using javascriptJuicer - A fast template engine using javascript
Juicer - A fast template engine using javascript
 
iOs app 101
iOs app 101iOs app 101
iOs app 101
 
Ooredis
OoredisOoredis
Ooredis
 
Ooredis
OoredisOoredis
Ooredis
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
数据处理算法设计要点
数据处理算法设计要点数据处理算法设计要点
数据处理算法设计要点
 
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
 
iOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techpartyiOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techparty
 
程式人雜誌 -- 2015 年9月號
程式人雜誌 -- 2015 年9月號程式人雜誌 -- 2015 年9月號
程式人雜誌 -- 2015 年9月號
 
Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitasking
 
nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言
 
Demo review
Demo reviewDemo review
Demo review
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
dbug in mysql
dbug in mysqldbug in mysql
dbug in mysql
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
AngularJS Sharing
AngularJS SharingAngularJS Sharing
AngularJS Sharing
 

了解Php内核

  • 2. 我是…… Er、T0ny 中心的学生 写PHP的程序员 喜欢各种折腾 12年10月29日星期⼀一
  • 4. C代码 PHP代码 gcc -o xxx ??? $> xxx 12年10月29日星期⼀一
  • 6. mod_php cli cgi/fastcgi ... SAPI PHP API streams, output, etc. PHP (core) Extensions mysql , standard library, etc Zend API Zend Extension API Zend Engine 12年10月29日星期⼀一
  • 7. $ php test.php Call Each extension’s MINIT Request test.php Call Each extension’s RINIT Execute test.php Call Each extension’s RSHUTDOWN Finish cleaning up after test.php Call Each extension’s MSHUTDOWN Terminate php 12年10月29日星期⼀一
  • 9. PHP内核 <?php echo “hi”; 词法分析 ?> 语法分析 Zend Engine (执行 opCodes) hi 12年10月29日星期⼀一
  • 10. 词法分析 Lex/Flex/re2c 12年10月29日星期⼀一
  • 11. array ( array ( <?php 0 => 368, // #define T_OPEN_TAG 368 1 => '<?php', echo $hi; 2 => 1, // LINE NO ?> ), array ( 0 => 316, // #define T_ECHO 316 1 => 'echo', 2 => 2, ), array ( 0 => 371, // #define T_WHITESPACE 371 1 => ' ', 2 => 2, token_get_all ), array ( 0 => 309, // #define T_VARIABLE 309 1 => '$haha', 2 => 2, ), 4 => ';', ) @see Zend/zend_language_parser.c 12年10月29日星期⼀一
  • 12. <?php T_OPEN_TAG ?> T_CLOSE_TAG $var T_VARIABLE if T_IF function T_FUNCTION for T_FOR echo T_ECHO exit T_EXIT 123 tokens php5.3 12年10月29日星期⼀一
  • 13. 语法分析 Yacc/Bison 12年10月29日星期⼀一
  • 14. T_ECHO echo_expr_list ';' echo_expr_list: echo_expr_list ',' expr { ... } | expr { ... } { ... } zend_do_echo() 12年10月29日星期⼀一
  • 15. void zend_do_echo(const znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_ECHO; opline->op1 = *arg; SET_UNUSED(opline->op2); } @see Zend/zend_compile.c zend_op 出场! 12年10月29日星期⼀一
  • 16. struct _zend_op { // 执行该opcode时调用的处理函数 opcode_handler_t handler; znode result; znode op1; znode op2; ulong extended_value; uint lineno; zend_uchar opcode; // opcode代码 }; 12年10月29日星期⼀一
  • 18. switch call goto switch (opcode){ switch (opcode){ case ZEND_ADD: case ZEND_ADD: break; goto zend_add: case ZEND_CALL: break; break; ... zend_add: call ZEND_ADD_HANDLER() 12年10月29日星期⼀一
  • 19. opcode * 25 + zend_vm_decode[op->op1.op_type] * 5 + zend_vm_decode[op->op2.op_type]; static const opcode_handler_t labels[] 3851 indexs php5.3 12年10月29日星期⼀一
  • 20. zend_op op_array zend_op zend_op ... 12年10月29日星期⼀一
  • 21. symbol_talble *active_op_array *active_symbol_talble op_array1 op_array2 ... execute_data execute_data ... 12年10月29日星期⼀一
  • 23. .php SAPI Compiler • Firefox/Chrome • Apache/Nginx • 词法分析 • Console • CLI • 语法分析 • Embed Executor OPCODES Output • Main Script Buffer • Switch/Call/Goto • Function Table •Console • Class Table 12年10月29日星期⼀一
  • 25. <?php $a = 3; $b = 5; if($a = 5 || $b = 7) { $a++; $b++; } $a=? $b=? 12年10月29日星期⼀一
  • 26. <?php $a = 3; $b = 5; if( $a = 5 || $b = 7 $a ) { $a++; $b++; } 答案: Zend/zend_language_parser.y 12年10月29日星期⼀一
  • 27. 关于TIPI www.php-internal.com 12年10月29日星期⼀一
  • 28. reeze er pan 12年10月29日星期⼀一
  • 30. 谢 谢 欢迎联系我: QQ:487223* email: er@zhangabc.com gtalk: er@zhangabc.com blog: www.zhangabc.com 12年10月29日星期⼀一