PHP7‚ŃNƒ‰ƒX‚̓oƒ‰ƒoƒ‰‚ɂȂÁ‚½

Posted by Hiraku on 2015-06-06

PHP7‚ł͖³–¼ƒNƒ‰ƒX‚ª“±“ü‚³‚ê‚Ü‚·B

PHP7’²¸(26)–³–¼ƒNƒ‰ƒX‚Ì“±“ü - Qiita

‚±‚êA’P‚ɍ\•¶‚¾‚¯‚̘b‚É‚¹‚¸AuƒNƒ‰ƒX‚Ì‘æ3‚Ì”\—Í‚ª’P“ƂŐ؂èo‚³‚ꂽv‚Æ‘¨‚¦‚邯–Ê”’‚¢‚Ì‚©‚ȂƎv‚¢‚Ü‚µ‚½B

ƒNƒ‰ƒX‚ªŽ‚Â3‚‚̖ðŠ„

ƒNƒ‰ƒX‚ªŽ‚Â3‚Â‚Ì–ðŠ„ - ¼”ö‘טa‚̂͂Ăȃ_ƒCƒAƒŠ[

uƒR[ƒfƒBƒ“ƒO‚ðŽx‚¦‚é‹Zpv‚̐¼”ö‘טaށ‚É‚æ‚邯AƒNƒ‰ƒX‚É‚Í

  • ƒ†[ƒU[’è‹`Œ^
  • ŽÀ‘•‚̍ė˜—p‚Ì’PˆÊ
  • ƒCƒ“ƒXƒ^ƒ“ƒX¶¬Ší

‚Ì3‚Â‚Ì–ðŠ„‚ª‚ ‚邯‚¢‚¢‚Ü‚·B ƒNƒ‰ƒX‚ªˆµ‚¢‚Â炢ŠT”O‚¾‚Æ‚·‚ê‚΁A‚»‚ê‚Í‚±‚Ì3‚‚̔\—Í‚ð‚܂Ƃ߂ϝ‚Á‚Ä‚¢‚é‚©‚ç‚Å‚·B

PHP‚̃†[ƒU[’è‹`Œ^AƒCƒ“ƒ^[ƒtƒF[ƒX

PHP‚̏ꍇAƒ^ƒCƒvƒqƒ“ƒg‚ª‚ ‚è‚Ü‚·‚µA’è‹`‚µ‚½ƒNƒ‰ƒX‚͌ォ‚çŠg’£‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñiƒI[ƒvƒ“ƒNƒ‰ƒX‚ł͂Ȃ¢jB

if ($obj instanceof FooClass) {
  //...
}

‚±‚́u$obj‚ªFooClass‚̃Cƒ“ƒXƒ^ƒ“ƒX‚Å‚ ‚év‚Æ‚¢‚¤Ž–ŽÀ‚¾‚¯‚ŁAŽ‚Á‚Ä‚¢‚郁ƒ\ƒbƒh‚ÍŠm’肵‚Ä‚¨‚èA‚»‚̐«Ž¿‚͌ォ‚ç•ύX‚³‚ê‚Ü‚¹‚ñB‚‚܂èPHP‚̃Nƒ‰ƒX‚ɂ̓†[ƒU[’è‹`Œ^‚Æ‚µ‚Ă̔\—Í‚ª‚ ‚è‚Ü‚·B

‚±‚̃†[ƒU[’è‹`Œ^‚Ì”\—Í‚Ì‚Ý‚ðŽ‚¿AƒCƒ“ƒXƒ^ƒ“ƒX¶¬”\—Í‚àAŽÀ‘•‚àŽ‚½‚È‚¢ŠT”O‚ªØ‚èo‚³‚ê‚Ü‚µ‚½B‚»‚ꂪƒCƒ“ƒ^[ƒtƒF[ƒX‚Å‚·B

if ($obj instanceof FooInterface) {
  //...
}

PHP7‚ł͖߂è’l‚̃^ƒCƒvƒqƒ“ƒg‚à‰ð•ú‚³‚ê‚Ü‚·‚̂ŁAˆÈ‘O‚æ‚è‚͏ڍׂɌ^‚ð‹Lq‚Å‚«‚邿‚¤‚ɂȂé‚Å‚µ‚傤B“®“IŒ^•t‚¯‚Ȃ̂ŎÀsŽžŒ^ŒŸ¸‚µ‚©‚Å‚«‚Ü‚¹‚ñ‚ªAƒeƒXƒg‚ªƒJƒo[‚Å‚«‚È‚¢”͈͂̌Ÿ¸‚ª‰Â”\‚ɂȂé‚̂ŁA‚æ‚èƒvƒƒOƒ‰ƒ€‚ðŒ˜˜S‚É‚·‚邱‚Æ‚ª‚Å‚«‚é‚Å‚µ‚傤B

ŽQlF PHP‚Ìinterface‚Ƃ͉½‚© - “D‚̂悤‚É

PHP‚ÌŽÀ‘•Ä—˜—p‚Ì’PˆÊAƒgƒŒƒCƒg

ƒNƒ‰ƒX‚ÍŒp³‚µ‚ÄŽÀ‘•‚ðÄ—˜—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µƒNƒ‰ƒX‚ɂ̓†[ƒU[’è‹`Œ^‚Ì”\—Í‚ª‚à‚ê‚È‚­•t‚·‚é‚̂ŁAŒp³‚·‚邯FX‚Æ•›ì—p‚ªo‚Ä‚µ‚Ü‚¢‚Ü‚·BPHP‚ÍJava‚É•í‚Á‚āA‘½dŒp³‚͋֎~‚·‚邱‚ƂɂȂÁ‚Ä‚µ‚Ü‚¢‚Ü‚µ‚½B

ƒNƒ‰ƒX‚É‚Í2‚Â‚Ì‘Š”½‚·‚é–ðŠ„‚ª‚ ‚è‚Ü‚·B1‚–ڂ́uƒCƒ“ƒXƒ^ƒ“ƒX‚ðì‚邽‚߂̂à‚́v‚Æ‚¢‚¤–ðŠ„‚ÅA‚±‚Ì‚½‚߂ɂ́uŠ®Œ‹‚µ‚½A•K—v‚È‚à‚Ì‚ð‘S•”Ž‚Á‚½A‘å‚«‚ȃNƒ‰ƒXv‚Å‚ ‚é•K—v‚ª‚ ‚è‚Ü‚·B2‚–ڂ́uÄ—˜—p‚Ì’PˆÊv‚Æ‚¢‚¤–ðŠ„‚ÅA‚±‚Ì‚½‚߂ɂ́u‹@”\‚²‚Ƃ́A—]Œv‚È‚à‚Ì‚ðŽ‚Á‚Ä‚¢‚È‚¢A¬‚³‚ȃNƒ‰ƒXv‚Å‚ ‚é•K—v‚ª‚ ‚è‚Ü‚·B

ƒNƒ‰ƒX‚ªuƒCƒ“ƒXƒ^ƒ“ƒX‚ðì‚邽‚߂̂à‚́v‚Æ‚µ‚ÄŽg‚í‚ê‚Ä‚¢‚邯‚«‚ɂ́AÄ—˜—p‚Ì’PˆÊ‚Æ‚µ‚Ă͑傫‚·‚¬‚é‚̂ł·B

(ƒR[ƒfƒBƒ“ƒO‚ðŽx‚¦‚é‹Zp p.241)

PHP5.4‚©‚瓱“ü‚³‚ꂽƒgƒŒƒCƒg‚͍ė˜—p‚Ì’PˆÊ‚Æ‚µ‚Đ؂èo‚³‚ꂽŠT”O‚Å‚·B

ŽÀ‘•‚ðŽ‚¿‚Ü‚·‚ªAƒCƒ“ƒXƒ^ƒ“ƒX‚̐¶¬”\—͂͂ ‚è‚Ü‚¹‚ñ‚µAƒ†[ƒU[’è‹`Œ^‚É‚à‚Ȃ蓾‚Ü‚¹‚ñB Œ^‚Æ‚µ‚Ă̔\—Í‚ª‚È‚¢‚̂́AƒNƒ‰ƒX‚Ƀ~ƒbƒNƒXƒCƒ“‚·‚éÛ‚ɁAƒƒ\ƒbƒh–¼‚ð•Ï‚¦‚é‚ȂǍD‚«ŸŽè‚ɂł«‚é‚©‚ç‚Å‚·B‚ ‚éƒgƒŒƒCƒg‚ðuse‚µ‚Ä‚¢‚é‚©‚ç‚ÆŒ¾‚Á‚āA‚»‚̃Nƒ‰ƒX‚É“Á’è‚̃ƒ\ƒbƒh‚ª‘¶Ý‚·‚邯‚͕ۏ؂³‚ê‚Ü‚¹‚ñB

trait FooTrait
{
  function doSomething() {
    echo __METHOD__;
  }
}

class Foo {
  use FooTrait {
    doSomething as fooSomething;
  }
}

–³–¼ƒNƒ‰ƒX‹L–@‚É‚æ‚éƒCƒ“ƒXƒ^ƒ“ƒX¶¬

PHP7‚Ì–³–¼ƒNƒ‰ƒX‹L–@‚ª‚ ‚ê‚΁AƒgƒŒƒCƒg‚©‚ç‚»‚̏ê‚ŃCƒ“ƒXƒ^ƒ“ƒX‚𐶐¬‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŒ^‚ª•K—v‚Å‚ ‚ê‚΃Cƒ“ƒ^[ƒtƒF[ƒX‚ð‚»‚Ìê‚ÅimplementsŽw’è‚·‚ê‚΂¢‚¢‚¾‚¯B

$obj = new class() implements FooInterface {
  use Foo, Baa;
};

ƒNƒ‰ƒX‚ðnew‚·‚éê‡‚É”ä‚ׂċL–@‚ªç’·‚Å‚·‚ªA‚»‚à‚»‚ànew‚ð‚ ‚¿‚±‚¿‚ɏ‘‚­‚̂̓eƒXƒ^ƒrƒŠƒeƒB‚ð‰º‚°‚Ü‚·‚̂ŁADIƒRƒ“ƒeƒi‚âƒT[ƒrƒXƒƒP[ƒ^[‚ŏ‘‚­‚ׂ«‚Å‚µ‚傤B

ƒNƒ‰ƒX‚ÆŒ¾‚¤ŠT”O‚ªŠó”–‰»‚µAŽg‚¢ŽÌ‚Ä‚é‚à‚̂ɂȂè‚Ü‚·B

ƒNƒ‰ƒX’è‹`‚ðŽg‚킸‚ÉOOP‚µ‚Ă݂é

—v‚·‚é‚ɁAPHP7‚ł̓Nƒ‰ƒX‚ð’è‹`‚¹‚¸‚ɃIƒuƒWƒFƒNƒgŽwŒüƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ª‚Å‚«‚邱‚ƂɂȂè‚Ü‚·B

  • ŽÀ‘•‚̍ė˜—p‚ª‚µ‚½‚¢‚È‚ç‚΃gƒŒƒCƒg‚ð’è‹`‚µ‚ÄŽg‚¢‚܂킷B
  • Œ^‚ð’è‹`‚µ‚ÄŽ–‘O/Ž–ŒãðŒ‚ð•\Œ»‚µ‚½‚¢‚È‚çƒCƒ“ƒ^[ƒtƒF[ƒX‚ðŽg‚¤B
  • ƒCƒ“ƒXƒ^ƒ“ƒX‚Ì‘g‚Ý—§‚Ä‚ÍDIƒRƒ“ƒeƒi“à‚Å–³–¼ƒNƒ‰ƒX‹L–@‚ðŽg‚¤B

Š´‘z

‚Ü‚¾“Á‚ÉŽÀ‘H“I‚ȃR[ƒh‚͏‘‚¢‚Ä‚¢‚È‚¢‚̂ł ‚­‚܂őz‘œ‚Å‚·‚ªA‚¢‚ë‚¢‚ë•Ï‚í‚é‚È‚ ‚ƁB

  • DIƒRƒ“ƒeƒi‚Ì”\—Í‘‘åB‚»‚̏ê‚Őݒè‚Å‚«‚é”͈͂ª‚·‚²‚­‘‚¦‚éB
  • Ä—˜—p‚Å‚«‚È‚¢ŽÀ‘•‚ª‚È‚­‚È‚éB
  • Ä—˜—p‚Å‚«‚È‚¢Œ^‚ª‚È‚­‚È‚éB
  • ƒfƒUƒCƒ“ƒpƒ^[ƒ“‚ÉŽú‚í‚ê‚È‚¢ƒ\[ƒXƒR[ƒh•ªŠ„‚ª‰Â”\‚ɂȂéB
  • ¡‚܂ł̃fƒUƒCƒ“ƒpƒ^[ƒ“‚ªŽg‚¦‚È‚¢‚̂œr•û‚É•é‚ê‚éB

_“‚àã‚ª‚邯‚ê‚ǁAŒ^‹Lq‚ð‚«‚¿‚ñ‚Æ‚·‚ê‚ÎŒ˜˜S‚³‚àã‚°‚ç‚ê‚邯Žv‚¢‚Ü‚·B

‚»‚̐Ìgoto‚Æ‚¢‚¤ˆê‚‚̊T”O‚¾‚Á‚½‚à‚Ì‚ªwhile‚âbreak‚â—áŠO‹@\‚Æ‚¢‚¤‚à‚Á‚Æ‹ï‘Ì“I‚È‹@”\‚É•ªŠ„‚³‚ꂽ‚悤‚ɁAƒNƒ‰ƒX‚ÌŠT”O‚àˆê‚‚ł͈µ‚¢‚Â炭•s•Ö‚¾‚Á‚½‚̂ŁA•ªŠ„‚³‚ꂽ‚Æ—‰ð‚·‚é‚Ì‚ª‚æ‚¢‚ÆŽv‚¢‚Ü‚·B

PHP7Žž‘ã‚̃‰ƒCƒuƒ‰ƒŠ‚ɂ́AƒNƒ‰ƒX‚ð—pˆÓ‚¹‚¸AƒgƒŒƒCƒgAƒCƒ“ƒ^[ƒtƒF[ƒXAŠÈ’P‚ÈDIƒRƒ“ƒeƒi+ƒfƒtƒHƒ‹ƒgÝ’肾‚¯€”õ‚µ‚āAŒã‚͍D‚«‚ɃJƒXƒ^ƒ}ƒCƒY‚µ‚ÄŽg‚¢‚È‚æA‚Æ‚¢‚¤ƒXƒ^ƒ“ƒX‚Ì‚à‚Ì‚ªŒ»‚ê‚é‚©‚à’m‚ê‚Ü‚¹‚ñ‚ˁB‚±‚̕Ӑæi“I‚È‘¼Œ¾Œê‚ÌŠF—l‚͂ǂ¤‚µ‚Ä‚¢‚é‚Ì‚©‹C‚É‚È‚é‚Æ‚±‚ë‚Å‚·B

wƒNƒ‰ƒX‚ð’è‹`‚·‚邯‚©ŒÃ‚¢xwƒNƒ‰ƒX~‚͘VŠQx‚»‚ñ‚È•—‚ÉŒ¾‚í‚ê‚鎞‘オ—ˆ‚½‚ç–Ê”’‚¢‚Å‚·‚ˁB

PHP‚̍ŐV‹LŽ–

×

‚±‚̍L‚Í90“úˆÈãV‚µ‚¢‹LŽ–‚Ì“Še‚ª‚È‚¢ƒuƒƒO‚É•\ަ‚³‚ê‚Ä‚¨‚è‚Ü‚·B