我的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