モダンPHPチュートリアル (LLまつり版)

モダンPHPチュートリアル (LLまつり版)

レガシーなプラクティスを捨ててモダンなコードを。

9b69fbdeb0713def44a8731091ce5885?s=128

Yusuke Ando

August 24, 2013
Tweet

Transcript

  1. MMNBUTVSJ!ZBOEP Modern PHP Tutorial d1)1࣌୅ͷ஌ࣝΛࣺͯɺ1)1࣌୅΁d

  2. ZBOEP $BOEZ$BOFQIQ ʮ࠙਌ձϐβൃ஫ΞϓϦʯ

  3. 1)1ରԠ1BB4 $IFGͰ"84Λࣗಈߏஙɺߋ৽ "84ͱಉ͡؀ڥΛ௿ίετʹ ࣌ؒ༗ਓ؂ࢹΦϓγϣϯ 44)TVEPՄೳ͔ͭαϙʔτ༗

  4. 1)1 8FCʹಛԽͨ͠εΫϦϓτݴޠ 8FCαʔϏεΛத৺ʹ෯޿͍ར༻ ඇΤϯδχΞͷར༻ऀ΋ଟ͍ ؒҧͬͨϓϥΫςΟε΋޿·͍ͬͯΔ

  5. ΞδΣϯμ جૅ஌ࣝ ؒҧͬͨϓϥΫςΟε ϞμϯͳϓϥΫςΟε ΍ͬͯΈΑ͏

  6. جૅ஌ࣝ

  7. ৘ใͷ୳͠ํ ॳ৺ऀ޲͚ͷॻ੶͸๛෋ ެࣜϚχϡΞϧͷಡΈํ͕େࣄ தʙ্ڃऀ޲͚ϑϨʔϜϫʔΫ͸༷ʑ 1)15IF3JHIU8BZ

  8. None
  9. ॻ੶બͼ ಺༰͕ݹ͘ͳΔ ݱ৔ʹ͍ΔஶऀɺϥΠλʔઐ໳ͷஶऀ αϯϓϧίʔυͷηΩϡϦςΟ໰୊ ݁ہ͸Կ࡭͔ͷ߹ΘٕͤʹͳΔ

  10. QIQOFU

  11. QIQOFU ެࣜϚχϡΞϧ ෆஅͷ౒ྗͰ೔ຊޠԽ͞Ε͍ͯΔ جຊతʹ࠷৽ͷ1)1ʹ४ڌ KQQIQOFUͱ͍͏ϛϥʔ΋͋Δ Կނ͔ σβΠϯ͕ϦχϡʔΞϧ༧ఆ

  12. ৽σβΠϯ

  13. ҠߦΨΠυ

  14. ऴྃͨ͠όʔδϣϯ 1)1  ʹऴྃࡁΈ 1)1  ʹऴྃࡁΈ 1)1  ʹऴྃࡁΈ

    1)1  ʹऴྃࡁΈ 1)1   ʹऴྃ༧ఆ
  15. ݱߦόʔδϣϯ 1)1   ໊લۭؒ Ϋϩʔδϟ    

     ஗Ԇ੩తଋറ -4# 1)1   "SSBZ4IPSU4ZOUBY USBJU      ϏϧτΠϯαʔό 1)1   δΣωϨʔλ pOBMMZ
  16. ϙΠϯτ 1)1Ҏ߱͸͔ͭͯ͸1)1ͱݺ͹Εͯ ͍ͨػೳΛؚΜͰ͍Δ 1)1த৺ͷݱ৔Ͱ͋ͬͯ΋1)1Ҏ߱ ͷػೳͷ׆༻͸े෼ʹਐΜͰ͍ͳ͍

  17. Ϟμϯ1)1 ݹ͍ϓϥΫςΟεΛഇ͠ɺ ਖ਼͍͠1)1Λॻ͜͏

  18. ϨΨγʔ1)1ɺɹۦஞͯ͠΍Δʜ ͜ͷੈ͔ΒʜɹҰߦʜ࢒Βͣ

  19. ؒҧͬͨϓϥΫςΟε photo by toyohara

  20. ਺ʑͷؒҧ͍  JOD $3 -' SFHJTUFS@HMPCBMT TBGF@NPEF NBHJD@RVPUF ! WBS

     NZTRM@DPOOFDU SFRVJSF@PODF 1&"3 ؆୯ Nڃ ΍΍ෳࡶ Nڃ ΍΍ෳࡶ Nڃ ෳࡶ Nڃ
  21. ϑΝΠϧ  JOD $3 -'

  22.  ϑΝΠϧͷ࠷ޙͷ ͸লུͰ͖Δ ͷޙͷۭന͕΍͔͍ͬ )551ϔομͷ੍ޚෆೳɺṖͷۭߦ େྔͷϑΝΠϧʹฆΕΔͱ໽հ

  23. Ṗͷۭߦ <?php //৭ʑͳίʔυ $view->render(); ?>

  24. ͜ͷԿॲ͔ʹۭߦ͕ʜ

  25. ͜ΕͰΑ͍ <?php //৭ʑͳίʔυ $view->render();  QIQͷ಺෦ͷۭߦ͸ग़ྗ͞Εͳ͍

  26. JOD$3 -' ֦ுࢠJODͷϑΝΠϧʹϥΠϒϥϦΛ ஔ͘ѱश ίʔυ࿙Ӯͷةݥ͋Γ վߦίʔυ΋-'ʹ౷Ұ͢΂͖

  27. 1)1ͷҨ࢈ SFHJTUFS@HMPCBMT TBGF@NPEF NBHJD@RVPUF@HQD SVOUJNF ഇࢭ͞ΕΔͷͰೋ౓ͱ࢖ͬͯ͸͍͚ͳ͍

  28. ෆ׬શͳ001ͷ໊࢒ ! WBS 

  29. ! Τϥʔ཈੍ԋࢉࢠ ͔ͭͯ͸ྫ֎͕ଘࡏ͠ͳ͔ͬͨ σόοάΛࠔ೉ʹ͢Δ໽հͳଘࡏ ద੾ʹίʔσΟϯά͢Ε͹ແ༻ͷଘࡏ

  30. WBS QVCMJDQSJWBUFͳͲ͕ແ͔ͬͨࠒͷଘࡏ QVCMJDQSJWBUFΛهड़͢Δ΂͖ TUBUJD΋ద੾ʹઃఆ͢Δ

  31.  ໌ࣔతͳࢀর౉͠ ͔ͭͯ͸ϝϞϦઅ໿ͷςΫχοΫ ݱࡏ͸ৗʹࢀরʹͳΔͷͰෆཁ ͋͑ͯίϐʔ͍ͨ࣌͠ʹDMPOF

  32.  1)1 <?php class A { var $foo = 1;

    } $obj =& new A(); $obj2 =& $obj; $obj2->foo = 2; echo $obj->foo;
  33. ͸ෆཁ 1)1 <?php class A { public $foo = 1;

    } $obj = new A(); $obj2 = $obj; $obj2->foo = 2; echo $obj->foo;
  34. ݹ͍ϥΠϒϥϦ NZTRM@DPOOFDU SFRVJSF@PODF 1&"3ͷޡ༻

  35. NZTRM@DPOOFDU ݹདྷΑΓ࢖ΘΕ͖ͯͨؔ਺ 1)1͔Βඇਪ঑ɺഇࢭ༧ఆ NZTRMJ@DPOOFDU1%0Λ࢖͏

  36. SFRVJSF@PODF ผϑΝΠϧͷϥΠϒϥϦͷಡΈࠐΈ ͱʹ͔͋͘Ε͜ΕಡΈࠐΈ·͘Γ͕ͪ BVUPMPBEػߏ͕ग़དྷͨͷͰෆཁʹ

  37. 1&"3 ོ͔ͭͯ੝ΛތͬͨϥΠϒϥϦ܊ ݫ֨ͳެࣜνϟωϧ ݱଘ͢ΔϑϨʔϜϫʔΫ౳ͷૅ Πϯετʔϥʔ͕࢖͍ʹ͍͘ ίϐʔ͞Εվม͞Εɺߋ৽ෆೳʹ

  38. 1&"3 ิ଍ ݱࡏ΋1)16OJU΍4NBSUZͳͲ1&"3ϕʔ εͷϥΠϒϥϦ͸׆ൃ ઃఆ΍1ZSVTͳͲʹΑΔରॲ๏΋͋Δ ਖ਼͘͠ར༻͠ɺద੾ʹӡ༻͞Ε͍ͯΕ ͹໰୊ͳ͍ ໰୊͸ޡ༻͞ΕΔ͜ͱ

  39. ͋ͳͨͷίʔυʹ͜͏͍ ͬͨ಺༰͕ଟ͍ͱةݥ

  40. ϨΨγʔ1)1ɺɹۦஞͯ͠΍Δʜ ͜ͷੈ͔ΒʜɹҰߦʜ࢒Βͣ

  41. ϞμϯͳϓϥΫςΟε

  42. None
  43. 1)15IF3JHIU8BZ 4MJN'SBNFXPSLͷ࡞ऀ+PTIࢯ͕ൃىਓ 1)1ͷϕετϓϥΫςΟε (JU)VC্Ͱ֤ݴޠʹ຋༁͞Εͨ ͜ͷ಺༰Λक͍ͬͯΕ͹Ϟμϯ

  44. ͷϓϥΫςΟε ͸͡Ίʹ ίʔσΟϯάελΠϧ ݴޠ࢓༷ ґଘؔ܎ͷ؅ཧ ίʔσΟϯάʹؔ͢Δ׳श σʔλϕʔε ηΩϡϦςΟ ςετ ֤छαʔόʔ΁ͷσϓϩΠ

    Ωϟογϡ ৘ใݯ ίϛϡχςΟ
  45. ͸͡Ίʹ 1)1Ҏ߱Λ࢖͏ .BD049ͷ1)1͸ݹ͍IPNFCSFX 8JOEPXT͸৭ʑ͋Γ͗͢ 7BHSBOU΋ศར

  46. 7BHSBOU 7JSUVBM#PYΛΠϯετʔϧ 7BHSBOUΛΠϯετʔϧ ޷͖ͳ7BHSBOUpMFΛDMPOF WBHSBOUVQ ׬શʹઃఆ͞ΕͨԾ૝Ϛγϯ͕ىಈ

  47. ίʔσΟϯάελΠϧ 143143143 1)1$PEF4OJ⒎FS 1)1$PEJOH4UBOEBSET'JYFS

  48. None
  49. େࣄͳͱ͜Ζ ϑΝΠϧ໊ɺύε ΠϯσϯτɺϒϨʔεͷҐஔ 1)14UPSNͳͲͷ*%&ͰݕࠪՄೳ

  50. ݴޠ࢓༷ͷϙΠϯτ 001ແ໊ؔ਺໊લۭؒτϨΠτ Ϋϩʔδϟ ϝλϓϩάϥϛϯά 41-$-* 9%FCVH

  51. DMBTTͷڭࣨ

  52. ґଘؔ܎ͷ؅ཧ $PNQPTFS͸ϓϩδΣΫτ಺ґଘؔ܎ 1&"3͸γεςϜશମͷґଘؔ܎ ࠷৽൛΁ͷߋ৽΍੬ऑੑνΣοΫ ϥΠϒϥϦQBDLBHJTUͰ୳ͤ͹Α͍

  53. $PNQPTFS DVSMTIUUQTHFUDPNQPTFSPSH JOTUBMMFScQIQ DPNQPTFSKTPO DPNQPTFSJOTUBMM SFRVJSFbWFOEPSBVUPMPBEQIQ` SFRVJSF͸͜Ε͚ͩ

  54. ίʔσΟϯά جຊ ೔෇΍࣌ࠁ%BUF5JNF σβΠϯύλʔϯ'BDUPSZ4JOHMFUPOϑ ϩϯτίϯτϩʔϥ.7$ ྫ֎ॲཧ

  55. جຊ ൺֱԋࢉࢠ JGFMTF TXJUDI γϯάϧΫΦʔτɺμϒϧΫΦʔτ ࡾ߲ԋࢉࢠ

  56. σʔλϕʔε 1%0 NZTRM@DPOOFDU ͸ഇࢭ༧ఆ 1%0͸൚༻త͔ͭߴػೳ όΠϯυΛઈର࢖͏

  57. όΠϯυ

  58. ηΩϡϦςΟ ύεϫʔυͷϋογϡQBTTXPSE@IBTI σʔλͷϑΟϧλϦϯά αχλΠζ όϦσʔγϣϯ 3FHJTUFS(MPCBMT1)1Ͱഇࢭ

  59. ݁࿦ɿಙؙຊΛങ͏

  60. ςετ Ϣχοτςετ1)16OJU౳ ػೳςετ4FMFOJVN ৼ෣ۦಈ։ൃ#%%#FIBU1)14QFD

  61. None
  62. σϓϩΠ 1BB4 OHJOYQIQGQNলϝϞϦ "QBDIFNPE@QIQ 1IJOH$BQJTUSBOP$IFG $* +FOLJOT 5FBNDJUZ

  63. None
  64. None
  65. Ωϟογϡ όΠτίʔυΩϟογϡ "1$9$BDIF;FOE0QUJNJ[FS8JO$BDIF ΦϒδΣΫτΩϟογϡ "1$.FNDBDIF3FEJT

  66. 5IF3JHIU8BZ த্ڃऀʹͱͬͯ͸౰ͨΓલͷ಺༰ ௕೥ͷࢼߦࡨޡͷ஝ੵͷ݁Ռ ॾࣄ৘͸͋ͬͯ΋ɺैͬͯଛ͸ແ͍

  67. ΍ͬͯΈΑ͏ʂ

  68. ࡞Δ΋ͷ 7BHSBOUͰಈ͘ $PNQPTFSͰϥΠϒϥϦΛಋೖ 5XJUUFS͔Β৘ใऔಘ

  69. 7BHSBOU 7JSUVBM#PY7BHSBOU IUUQTHJUIVCDPNZBOEPEQIQ OHJOYWBHSBOUTBNQMF HJUDMPOF WBHSBOUVQ

  70. 

  71. DPNQPTFSKTPO WBHSBOUTTI DEWBHSBOU@EBUBTBOECPY DPNQPTFSKTPOΛهड़͢Δ ࣗಈͰ΋खಈͰ΋Ͱ͖Δ

  72. DPNQPTFSKTPO { "name": "llmatsuri/sample", "authors": [ { "name": "yando", "email":

    "yandod@gmail.com" } ], "require": { "dg/twitter-php": "*" } }
  73. DPNQPTFSKTPO ΄͍͠ϥΠϒϥϦΛݕࡧͯ͠ࢦఆ͢Δ 8FCͰ΋ίϚϯυͰ΋ݕࡧͰ͖Δ ࣮͸1&"3΋ΠϯετʔϧͰ͖Δ ࠷ޙʹDPNQPTFSJOTUBMMͰ·ͱΊͯ%-

  74. DPNQPTFSJOTUBMM vagrant@precise64:/vagrant_data$ composer install Loading composer repositories with package information

    Installing dependencies (including require-dev) - Installing dg/twitter-php (v3.1) Loading from cache Writing lock file Generating autoload files
  75. JOTUBMM͢Δͱ DPNQPTFSMPDL͕ੜ੒͞ΕΔ WFOEPSҎԼʹϥΠϒϥϦ͕%-͞ΕΔ WFOEPSҎԼʹΦʔτϩʔμ͕഑ஔ

  76. ࢖༻ޙ

  77. BVUPMPBE BVUPMPBEQIQ͚ͩΛSFRVJSF͢Δ ඞཁͳ࣌ʹ֤ΫϥεΛࣗಈͰಡΈࠐΉ ೋ౓ͱSFRVJSF@PODFΛॻ͔ͳ͍ ϑϨʔϜϫʔΫ͕ಡΈࠐΉ৔߹΋͋Δ

  78. JOEFYQIQ <?php require_once 'vendor/autoload.php'; $twitter = new Twitter(); ͜Ε͚ͩͰ5XJUUFSΫϥεΛࣗಈతʹ WFOEPSEHUXJUUFSQIQTSD͔ΒಡΈࠐΉʂ

  79. Τϥʔʁ 5XJUUFSΫϥε͸ίϯγϡʔϚΩʔͱ ίϯγϡʔϚγʔΫϨοτ͕ඞཁΒ͍͠

  80. EFWUXJUUFSDPNBQQT αΠϯΞοϓ ΞϓϦΛ࡞੒ ੜ੒͞ΕͨΩʔ৘ใΛίϐͬͯ࢖͏

  81. औಘ <?php require_once 'vendor/autoload.php'; $twitter = new Twitter( 'aaaa', 'bbbb',

    'cccc', 'dddd' ); $info = $twitter->loadUserInfo('yando'); var_dump($info->status->text);
  82. ͓͓ʂ

  83. ͋ͱ͸ ϥΠϒϥϦΛDPNQPTFSKTPO΁௥Ճ DPNQPTFSVQEBUFͰߋ৽ WFOEPSΛίϛοτ͠ͳ͍ σϓϩΠ࣌ʹJOTUBMMͰWFOEPSΛ࠶ੜ

  84. ͞Βʹ 143Λक͍ͬͯΕ͹ࣗ࡞ΫϥεͰ΋ BVUPMPBEʹରԠͰ͖Δ 1&"3ͳͲ΋DPNQPTFSͰΠϯετʔϧ ίʔυ΍ϦϙδτϦ͕εοΩϦ

  85. ࣭໰ʁ