我的PHP学习成长之路 秦朋 PHPCON2018
2020-02-27 173浏览
- 1.౯ጱPHPԟ౮ᳩԏ᪠ ᑇ๏@ᄆᄆڊᤈ
- 2.ӻՈᓌՕ ᑇ๏ҁፏݘय़ݏ҂ l ᄆᄆṛᕆݎૡᑕғܔړක l ̽PHP7ٖ໐ڽຉ֢̾ᘏ l რᶱፓғPHP-AOPಘ̵ Memcached Goਮಁᒒ l GitHub:https://github.com/pangudashu
- 3.֦ฎํވᬦզӥࢯజҘ l ࢯజ1ғෆॠ؉ӱ҅ۓӧᎣ᭲ᧆই֜౮ᳩҘ l ࢯజ2ғԧپଙPHP҅૪჻ኈᅯᆧ҅ฎވᥝ ٌਙҘ l ࢯజ3ғಲຝ҅ܔᕍࣁPHPොݻই֜ᬰᴤҘ
- 4.Ӟӻବ੶Ꮁ١ጱPHPԏ……
- 5.1̵ള l 2011ଙ҅य़ԫᒫӞེളPHP l CMSғᕢ̵ἶ̵ܗdiscuz̵ecshop… l ؉մӱᒊғॺཛྷ̵දhtml̵ఊ… l ӧտPHP…
- 6.2̵ԟ l ള“کय़ᶱፓ”-දӞӻࠟउғॺཛྷሻӧԧ̵ ఊӧ֘Ոԧ…… l ᬮమᩥҘெԍېҘԟѺ l चᏐғC̵Sql Server̵හഝᕮ̵ᦇᓒᗑᕶ… l ፡ԡဩ̵හഝପ->ಧᐏֺ->ಧᶱፓ->ٟᶱፓ
- 7.l ᕪܲԧ2ӻ์ݸgetғPHPဩ̵ᬳහഝପ̵ॺ ཛྷ̵thinkphp… l ᛔ౯ఽᥧஉஉஉᜉঅ… So Easy?
- 8.3̵ਫԟ 2013.7-2014.3 360ᳯᒼ l ත឴ғ • ԧፘଠጱದᥤᰀғMemcachedᖨਂ ̵Mysql̵Linux̵PHPຝ̵Smarty̵MVC̵Nginx̵๐ۓ۸̵ ၾ௳ᴚ…ڜ • ࢫᴚᕅӥِ౮ԧᥢጱᖫᎱԟబ l ఽᨀ @ἓज़᪠Ո
- 9.4̵ૡ֢ 2014.7-2015.11 ᇸ l ӱۓ᭦ᬋ̵ٟAPIളݗ l CURD̵ॺཛྷ̵CURD̵ॺཛྷ̵CURD̵ॺ ཛྷ… l ఽᥧഩൎጱದਠقᚆຝӱۓԧ҅ᛔ౯ఽᥧஉஉ உᜉঅ…
- 10.ࢯజ1ғ ෆॠ؉ӱ҅ۓӧᎣ᭲ᧆই֜౮ ᳩ?
- 11.ᕪḵ1ғ፡რᎱ l ํᭌೠጱ̵ଃ፳ፓጱ፡ғӱۓӾଉአጱದত፡ l ࠺ԭړᥴრᎱᕮғቘႴ༩რᎱጱᕮ l ഩൎ፡რᎱጱێଶғىᲫጱ᮱ړႮف፡ٌ҅ਙ᮱ړᔋኼ፡ l ใᕚਧғ᭬کᵙᥴጱ᮱ݢړզᭌೠضᕰᬦ
- 12.l ୌᎣᦩ֛ᔮғრᎱݝฎৼ̵ಬಋ҅᭗ᬦ፡რᎱತک ᛔ૩ದӤጱᎨ҅ᆐݸԟ̵ഩൎ l ᶾտຝ̵ᦡᦇཛྷୗғԅӱۓ݇׀ᘍ҅զᛘአ҅ݍ ḝӱۓ l ӧྊԭ፡ғ࠺ԭ൏ၥ҅፡Ӟ᮱ضړ؊ӥ҅ਫሿᘏጱ ଶᘍݸᶎտই֜ਫሿ҅ᆐ݄ݸḵᦤ҅ᬟ፡ᬟሖ҅ᦒᕞᖌ ොୗ
- 13.౯፡ᬦپӻᶱፓғ l ThinkPHPრᎱғᕹӞ̵ݗفMVC̵੶ړᛔۖے̵ ᪠ኧ̵ཛྷක l MemcachedრᎱғग़ᕚᑕཛྷୗ̵TCP̵ԫᬰګ/ ̵ᦓܐᥴ۱/۱̵ኞ౮ᘏ-ၾᩇᘏཛྷ̵ࣳIO॔አ l YafრᎱғPHPಘጱचᕮ/ٟဩ̵ٖ᮱ڍහ/ᔄᒵጱ ਧԎ l BeegoრᎱғଃ፳PHPຝጱᖌ፡҅ྲ૧ڦ
- 14.源码只是看看就行了? NO!
- 15.ᕪḵ2ғಧრᎱ l ԅՋԍᥝಧҘ • ᕕӤᕣᥧၠ҅Ԫᤈ҅ےႮܦ̵፥ྋഩൎ l ՋԍײಧҘ • რᎱํӻෆ֛༷ஷ̵፡ӻ૧ӧग̵़ᕮݸ
- 16.l ெԍಧҘ • ӧᥝय़ᶎᑌ̵ፗള೩ᨬ • ضᛔ૩ٟ҅ӧտጱࣈොٚ݇ᘍრᎱ • ੱݢᚆጱ໑ഝᛔ૩ጱ᪠ਫሿ
- 17.l ಧᬦYafғಘ፡ጱԧ҅Ԟտٟԧ l ಧᬦQFrame̵ThinkPHPғPHPຝҘSo Easy! l ಧᬦMemcachedғTCP๐ۓҘNo ProblemѺ l ಧᬦBeegoғGoԞᓒفᳪԧ ……
- 18.4̵ૡ֢ ࢧکૡ֢Ӿғ l CURD̵ॺཛྷ̵CURD̵ॺཛྷ̵CURD̵ॺ ཛྷ…… l ఽᥧഩൎጱದਠقᚆຝӱۓԧ҅ᛔ౯ఽᥧஉஉஉ ᜉঅ… ԏڹ፡֒ဌํጱӱۓԞํஉग़ݢ؉ԏ॒ԧ
- 19.ᕮғ l ইຎࣁӱۓӾ፡ӧک౮ᳩ҅ๅݢᚆጱܻࢩฎێۑӧड़ l ؉ӱۓଚᶋဌํ౮ᳩ҅࠺ԭᰄრጱێᰁ l ԧᥴବ੶ଚӧӞਧ੪ᥝٟବ੶҅ᦡᦇཛྷୗ̵ຝᦡ ᦇᬯԶ᮷ฎත឴
- 20.2015.11 ᄆᄆ l Ԇෛӱۓᕚದਫሿғཛྷ̵ࣘړښຝ੶ړᥢړ̵ښ ପړᤒᦡᦇ̵ᖨਂොໜ…… l ದک܋ԧ҅ԞଫአکӱۓӾ݄ԧ҅Ԟฎࢫᴚ ໐ஞ౮ާԧ l ᥧզݸᶱፓਠݢقզᙯձԧ҅ᛔ౯ఽᥧஉஉஉ ᜉঅ…
- 21.困惑2: ԧپଙPHP҅૪჻ኈᅯᆧ҅ฎވ ᥝٌਙҘ
- 22.2017.4 ᄆᄆ l ྫྷᆐಲPHP҅Golang̵C++҅ܔړක
- 23.l Goଚᶋਠᗦ෫ᗌғ • Gcᳯ᷌ • ٖਂအᄋ • ݎපሲ֗ • ֵአᔺቜҁӨPHPፘྲ҂ l ᕮғ • ᦊᦩݝکฎૡٍ҅ํݱಅᳩ҅ഩൎ ग़ᳪฎᥝጱ҅ࣁӧݶጱ࣋วᭌೠ ᭇݳጱ
- 24.᯿ෛᘍPHPғ • ᎨࣁߺҘᚆ፥ጱ֗ހҘԅՋԍ֗Ҙ • ᓌ၄==ᓌܔҘ • Go/C++ݢզਫሿጱӳᥜPHPԅՋԍӧᤈҘ • ᚆࣁވPHPӤᬰӞྍํಅᑱᏈҘ
- 25.ࢯజ3ғ ಲຝ҅ܔᕍࣁPHPොݻই֜ ᬰᴤҘ
- 26.或许可以这样: l ᭗ᬦಘौय़PHPጱۑᚆғྲইswoole l ႮفቘᥴPHPғPHPრᎱ̵ቘᥴٖ᮱ਫሿ l ᦶᥴ٬PHPಸڊጱbugғhttps://bugs.php.net/l ᦶਫሿPHPෛጱᇙғྲইgoጱܐᑕ̵defer…https://wiki.php.net/rfc/l ٚٚᬰӞྍ… l “ٟ”PHPکٟPHPғ౮ԅềߵᮎጱካՈ
- 27.为什么要看内核? l ԟٖ໐ጱොဩᦞ̵ᦡᦇཛྷୗ̵ຝཛྷୗғֵܨӧ ٟٖ໐Ԟݢզکஉग़҅ᬯԶӳᥜๅݢᩃ l ܋ಘݎᚆێғᆧఀٖ໐ݸٚݎಘԪۑ l ṛᥴ٬PHPᳯ᷌ጱᚆྲ҅ێইғ
- 28.
- 29.empty executor end ZEND_FE_RESET_R ZEND_FE_FETCH_R ZEND_ASSIGN 循环体 statement ZEND_JMPNZ ZEND_FE_FREE foreach后语句
- 30.内核怎么看? l ቘႴ༩PHPຝᕮғsapi̵php̵zend̵ext... l ๋໐ஞጱzendཛྷࣘفಋ҅Ⴔ༩PHP໐ஞᥴຉၞᑕ l ೆᥴPHPᥴຉ̵ಗᤈᴤྦྷ҅᭑ӻධظ l ٟᓌܔጱᐏֺ҅አgdb᭄ݱӻᴤྦྷ l ض፡ፘىጱහഝᕮ҅໑ഝᕮ౮ާሖၥਫሿොୗ
- 31.5、内核探索 l PHPٖ໐ጱຝᕮฎՋ ԍৼጱҘ • SAPIғള੶ف • PHPғᨮᨱᬌ̵فᬌ̵ڊweb᭗מ ᒵૡ֢ • Zend VMғPHPᚕጱᥴຉಗᤈ • PHP/Zendಘ PHP 浏览器 16 SAPI 2 5 main 3 4 ZendVm Run-Time Compiler Executor Extension ᇔቘ
- 32.l Ӟӻ᧗᮷ᕪܲᮎԶᴤྦྷҁኞޮ๗҂Ҙ php_module_startup() 模块初始化阶段 php_request_startup() 请求初始化阶段 main() php_execute_script() 执行脚本阶段 php_request_shutdown() 请求关闭阶段 php_module_shutdown() 模块关闭阶段
- 33.l ጱचᏐ—ݒᰁฎই֜ਫሿጱҘ • zval̵zend_valueғݒᰁጱٖ᮱ᕮ • double̵long̵boolፗളਂࣁؙvalue • zend_array̵zend_string ̵zend_object̵zend_resource ̵zend_reference • 16b0yte 8 12 16 zend_value u1 uint32_t struct _zval_struct { zend_value value; /* value */ union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar type, /* active type */ zend_uchar type_flags, zend_uchar const_flags, zend_uchar reserved) /* call info for EX(This) */ } v; uint32_t type_info; } u1; union { uint32_t var_flags; uint32_t next; /* hash collision chain */ uint32_t cache_slot; /* literal cache slot */ uint32_t lineno; /* line number (for ast nodes) */ uint32_t num_args; /* arguments number for EX(This) */ uint32_t fe_pos; /* foreach position */ uint32_t fe_iter_idx; /* foreach iterator index */ } u2; };
- 34.l ݒᰁᛔۖࢧතฎெԍਫሿҘ • አᦇහ • ݒᰁᩙݝीےvalueጱአེහ҅وአvalue • አᦇහᒵԭ0᯽නvalue • ٟ॔ګ • አᦇහय़ԭ0ጱvalueݎኞٟ֢ᬰᤈړᐶ
- 35.$a = array(1); //a -> zend_array_1(refcount=1) $b = $a; //a̵b -> zend_array_1(refcount=2) $b[] = 2; //a -> zend_array_1(refcount=1) dup //b -> zend_array_2(refcount=1) var_dump($a);
- 36.l PHPᚕᥴຉಗᤈᕪܲԧߺԶᬦᑕҘ PHPᚕ ᖫᦲ ᥴຉᚕ҅ኞ౮oplineե ړܔຉ̵ဩᥴຉ ኞ౮ುဩ ᖫᦲAST ኞ౮եᵞ̵ᒧݩᤒ ಗᤈ Call opcodeଫጱե ZEND_ASSIGN ZEND_ECHO ZEND_RETURN
- 37.1҂ᖫᦲғ PHPᚕ -----> opcodes ZEND_AST_STMT_LIST 根节点 ZEND_AST_ASSIGN ZEND_AST_ECHO ZEND_AST_VAR ZEND_AST_ZVAL $a “hi,PHP!” …
- 38.op1 ZEND_ASSIGN 0xffxx 0xffxx … ZEND_ECHO op2 ZEND_RETURN zend_op_array 局部变量区 $a … literals 123 …
- 39.2҂ಗᤈғ CALL̵GOTO̵SWITCHཛྷୗ CALLཛྷୗғ LOOPғ CALL HANDLER END
- 40.zend_execute_data *execute_data = ex; while (1) { int ret; //ಗᤈ୮ڹե if (UNEXPECTED((ret = ((opcode_handler_t)execute_data->opline->handler )(execute_data)) != 0)) { if (EXPECTED(ret > 0)) { execute_data = EG(current_execute_data); } else { return; } } }
- 41.不止于此 l ᇙғ • ڍහ̵ᶎݻ̵ݷᑮᳵ • قੴݒᰁ̵ᶉாݒᰁ̵ଉᰁ • կړඪғ if̵else̵switch • ሾᕮғdo while̵while̵for̵foreach • Ӿෙ݊᪡ғbreak̵goto • ଉ॒ቘғtry catch • կአғInclude̵require • … l ٖਂ֢ғZendMM l ᕚᑕਞقғTSRM l Opcacheғᖨਂ̵ս۸̵JIT l ……
- 42.学习资料 lhttp://www.laruence.com/lhttp://nikic.github.io/lhttp://www.phpinternalsbook.com/lhttps://github.com/pangudashu/php7-internall Orғ
- 43.Thanks PHPCON ਥᗑғwww.phpconchina.com ق᮱ PPT ӥғhttps://github.com/ThinkDevelopers/PHPConChinaQ&A ਥොQQᗭғ34449228̵135615537 ਥොلռݩғThinkInLAMP