Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

いまどきのPHP

8,617 views

Published on

2013/09/28 関西PHP勉強会 in JAWS FESTA Kansai 2013

Published in: Technology
  • Be the first to comment

いまどきのPHP

  1. 1. 2013/09/28 shin1x1 関西PHP勉強会 in 京セラドーム いまどきのPHP
  2. 2. 昔のPHP (c) 2013 Masashi Shinbara @shin1x1 • HTMLとPHPの混在 • <body>タグの中にロジック • どこからでもDB接続 • 重複しまくりコード • とびかうグローバル変数....
  3. 3. 昔のPHP (c) 2013 Masashi Shinbara @shin1x1 HTMLとPHPが 混在したコード
  4. 4. Agenda (c) 2013 Masashi Shinbara @shin1x1 • オブジェクト指向機能 • オブジェクト指向の活用 • 最近のトピック
  5. 5. (c) 2013 Masashi Shinbara @shin1x1 オブジェクト指向機能
  6. 6. オブジェクト指向言語 (c) 2013 Masashi Shinbara @shin1x1 • 隠蔽(カプセル化) • 継承(インヘリタンス) • 多態性(ポリモフィズム)
  7. 7. 隠蔽(カプセル化) (c) 2013 Masashi Shinbara @shin1x1 • アクセス修飾子 <?php class Foo { public $public = 'public'; protected $protected = 'protected'; private $private = 'private'; } public どこからでもアクセス可能 protected 定義したクラス、継承したクラス private 定義したクラスのみ
  8. 8. 隠蔽(カプセル化) (c) 2013 Masashi Shinbara @shin1x1 <?php class Foo { public function public_method() { // どこからでも実行可 } protected function protected_method() { // Fooクラスとその継承クラス } private function private_method() { // Fooクラスのみ } }
  9. 9. 継承 (c) 2013 Masashi Shinbara @shin1x1 <?php class Foo { public function hello() { echo 'Foo'.PHP_EOL; } } class FooChild extends Foo { public function hello() { echo 'FooChild'.PHP_EOL; } } $obj = new FooChild(); $obj->hello(); // FooChild • 単一継承のみ 継承
  10. 10. 多態性(ポリモフィズム) (c) 2013 Masashi Shinbara @shin1x1 <?php interface Printable { public function output(); } class Foo implements Printable { public function output() { echo 'Foo'; } } class Bar implements Printable { public function output() { echo 'Bar'; } }
  11. 11. 多態性(ポリモフィズム) (c) 2013 Masashi Shinbara @shin1x1 <?php class SomeObject { public function execute(Printable $obj) { $obj->output(); } } $obj = new SomeObject(); $obj->execute(new Foo()); // Foo $obj->execute(new Bar()); // Bar Printable なら ok
  12. 12. クラスメソッド、定数、変数 (c) 2013 Masashi Shinbara @shin1x1 <?php class Foo { const CLASS_CONSTATNS = 'aws'; // クラス定数 static public $classValue = 'abc'; // クラス変数 static public function classMethod() { // クラスメソッド } } echo FOO::CLASS_CONSTATNS; // aws echo Foo::$classValue; // abc Foo::classMethod();
  13. 13. コンストラクタ、デストラクタ (c) 2013 Masashi Shinbara @shin1x1 <?php class Foo { protected $name = null; public function __construct($name) { $this->name = $name; echo '__construct'.PHP_EOL; } public function __destruct() { echo '__destruct'.PHP_EOL; } } $obj = new Foo('Jun'); // __construct // __destruct コンストラクタ デストラクタ
  14. 14. 抽象クラス、メソッド (c) 2013 Masashi Shinbara @shin1x1 <?php abstract class AbstractFoo { public function something() { $this->hello(); } abstract protected function hello(); } class Foo extends AbstractFoo { protected function hello() { echo 'Foo'; } } $obj = new Foo(); $obj->something(); // Foo 抽象クラス (インスタンス化不可) 具象クラス
  15. 15. final (c) 2013 Masashi Shinbara @shin1x1 <?php final class NoInheritance { } class Foo { final public function noInheritanceMethod() { // } } 継承できない オーバーライドできない
  16. 16. インターフェイス (c) 2013 Masashi Shinbara @shin1x1 <?php interface Printable { public function printValue($value); } interface Writable { public function writeValue($value); } class Foo implements Printable, Writable { public function printValue($value) { // } public function writeValue($value) { // } } 複数実装可
  17. 17. タイプヒンティング (c) 2013 Masashi Shinbara @shin1x1 <?php interface Printable {} interface Writable {} class Foo { public function bar(Printable $printer, Writable $writer) { // } public function something(array $array) { // } } タイプヒンティング タイプヒンティング タイプヒンティング
  18. 18. 名前空間 (c) 2013 Masashi Shinbara @shin1x1 <?php namespace Vendorlib; use AwsS3S3Client; class Foo { public function method() { throw new Exception(); } } 名前空間の宣言 名前空間のインポート グローバル VendorlibFoo
  19. 19. トレイト (c) 2013 Masashi Shinbara @shin1x1 • Mixin のようなもの • 変数やメソッドをまとめたもの • クラスに追加して利用 • 複数個追加できる
  20. 20. トレイト (c) 2013 Masashi Shinbara @shin1x1 <?php trait Say { protected $name = 'Jun'; public function say() { echo 'Hello '.$this->name.PHP_EOL; } } class Foo { use Say; } $obj = new Foo(); $obj->say(); トレイト トレイトの利用
  21. 21. PHPのオブジェクト指向機能 (c) 2013 Masashi Shinbara @shin1x1
  22. 22. 詳しくは (c) 2013 Masashi Shinbara @shin1x1 http://jp1.php.net/manual/ja/language.oop5.php
  23. 23. (c) 2013 Masashi Shinbara @shin1x1 オブジェクト指向 の活用
  24. 24. フレームワーク (c) 2013 Masashi Shinbara @shin1x1 • フレームワークの利用 • オブジェクト指向 • MVC • デファクトスタンダードは無い
  25. 25. フレームワーク (c) 2013 Masashi Shinbara @shin1x1 • CakePHP • Symfony • Zend Framework • CodeIgniter • FuelPHP • Laravel • Sliex • Phalcon • Ethna • Yii • BEAR.Sunday • Lithium • TYPO3 FLOW • Kohana • Slim • Aura for PHP
  26. 26. Symfony (c) 2013 Masashi Shinbara @shin1x1 • コンポーネントで構成 • コンポーネントは独立して利用可 • 他のフレームワークやライブラリで • 部品としての品質も高い • Zend Frameworkも
  27. 27. PHPUnit (c) 2013 Masashi Shinbara @shin1x1 http://phpunit.de/manual/3.7/ja/
  28. 28. PHPUnit (c) 2013 Masashi Shinbara @shin1x1 • xUnit の PHP 実装 • テストダブルやSelenium連携など • フレームワークやライブラリのテスト
  29. 29. PhpStorm (c) 2013 Masashi Shinbara @shin1x1 http://www.jetbrains.com/phpstorm/
  30. 30. PhpStorm (c) 2013 Masashi Shinbara @shin1x1 • JetBRAINS社のIDE • 補完機能が強力 • オブジェクト指向に則れば恩恵大 • いま注目のIDE
  31. 31. (c) 2013 Masashi Shinbara @shin1x1 最近のトピック
  32. 32. PHP 5.5 リリース (c) 2013 Masashi Shinbara @shin1x1 • 2013/06 リリース • ジェネレータ • OPcache • パスワードハッシュ関数
  33. 33. PHP 5.3 が EOL (c) 2013 Masashi Shinbara @shin1x1 • 5.3.27 が最後のリリース • セキュリティフィックスのみ • 2014/06 頃に終了 • 今後は、5.4 or 5.5 を利用
  34. 34. BEAR.Sunday (c) 2013 Masashi Shinbara @shin1x1 https://code.google.com/p/bearsunday/
  35. 35. BEAR.Sunday (c) 2013 Masashi Shinbara @shin1x1 • @koriym さんが開発 • リソース指向のフレームワーク • phpnw で講演 • Litinum 作者も注目
  36. 36. Ginq (c) 2013 Masashi Shinbara @shin1x1 https://github.com/akanehara/ginq
  37. 37. Ginq (c) 2013 Masashi Shinbara @shin1x1 • @a.kanehara さんが開発 • LINQ to Object を PHP に • メソッドチェインで配列操作 • 遅延実行
  38. 38. 注目のキーワード (c) 2013 Masashi Shinbara @shin1x1 • PhpStorm • Composer • PSR • Vagrant
  39. 39. (c) 2013 Masashi Shinbara @shin1x1 まとめ
  40. 40. まとめ (c) 2013 Masashi Shinbara @shin1x1 • PHPでオブジェクト指向開発 • PHPらしく貪欲に成長 • どう使うかはあなた次第
  41. 41. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1

×