SPL fukuokaphp_1

2,099 views

Published on

Standard PHP Libraryの説明。
主にAutoload, Iterator。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,099
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

SPL fukuokaphp_1

  1. 1. SPL 2012/5/23FukuokaPHP #1
  2. 2. Yasushi Ichikawa@cakephper / @ichikawayhttp://d.hatena.ne.jp/cakephper
  3. 3. 1. SPL とは 2. Autoload 3. Iterator@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  4. 4. SPL とは
  5. 5. SPL とは? Standard PHP Library  クラス、インターフェース、例外、関数   PHP5.0 から導入された  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  6. 6. SPL とは? 使わなくても良い 使えば便利というだけ    @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  7. 7. SPL とは? Autoload Iterator 配列処理   ファイル操作 例外 スタック、キュー Observer   http://jp.php.net/manual/ja/book.spl.php@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  8. 8. Autoload
  9. 9. Autoload require/import 地獄に サヨナラだ   require_once(File); require_once(DB);   require_once(Session); require_once(Model); require_once(Helper); require_once(Form);@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  10. 10. Autoload クラス利用時に動的読込み ファイル名とクラス名を一致   させておくと良い  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  11. 11. マジックメソッド __autoload new Foo();   NG: Foo クラスが無い@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  12. 12. マジックメソッド __autoload require ./lib/Foo.php; new   Foo(); OK@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  13. 13. マジックメソッド __autoload require ./lib/Foo.php; require ./lib/Bar.php; new Foo();   new Bar(); OK@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  14. 14. マジックメソッド __autoload function __autoload($name){ require lib/. $name . .php; }   new Foo(); //$name に Foo new Bar(); //$name に Bar OK@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  15. 15. SPL autoloader __autoload() グローバル関数 処理は1つのみに限定 spl_autoload_register()    コールバックを登録   複数コールバックの登録が可能@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  16. 16. SPL autoloader // CakePHP 例 lib/Cake/bootstrap.php require CAKE . Core . DS .App.php;   spl_autoload_register(array(App, load));@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  17. 17. Iterator
  18. 18. Iterator 繰り返し処理 foreach   でまわせる  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  19. 19. Iterator クラス達 AppendIterator LimitIterator ArrayIterator MultipleIterator NoRewindIterator CachingIterator ParentIterator CallbackFilterIterator RecursiveArrayIterator DirectoryIterator RecursiveCachingIterator  FilesystemIterator EmptyIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator FilterIterator RecursiveFilterIterator GlobIterator RecursiveIteratorIterator InfiniteIterator RecursiveRegexIterator IteratorIterator RecursiveTreeIterator RegexIterator@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  20. 20. IteratorディレクトリクラスRecursiveDirectoryIterator   例  ・ディレクトリの中のディレクトリのファイルを取得@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  21. 21. Iterator 再帰クラス  RecursiveIteratorIterator 例 ・配列の中の配列まで処理  ・ディレクトリの中のディレクトリを処理@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  22. 22. Iterator 正規表現クラス  RegexIterator 例 ・イテレーション中に正規表現で処理  ・ディレクトリの .php ファイルのみを取得@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  23. 23. Iterator DirectoryRecursiveIterator RecursiveIteratorIterator ディレクトリを 再帰的に探索しながら   特定ファイル名に絞込み   RegexIterator@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  24. 24. 階層構造ディレクトリからファイル一覧表示 $Iterator = new RecursiveIteratorIterator(   new RecursiveDirectoryIterator($path) );   foreach ($Iterator as $file) { if ($file->isFile()) { echo $file->getPathname(). "n"; } }  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  25. 25. 階層構造ディレクトリからファイル一覧表示 RecursiveXXXXIterator のインスタンスを   RecursiveIteratorIterator に渡してまわす  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  26. 26. 階層構造ディレクトリからファイル一覧表示 さらに php ファイルのみに絞る $Iterator = new RecursiveIteratorIterator(   new RecursiveDirectoryIterator($path) ); $Iterator2 =  new RegexIterator( $Iterator, /^.+.(php)$/i ); foreach ($Iterator2 as $file) { if ($file->isFile()) {echo $file->getPathname(). "n";} }@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  27. 27. 階層構造ディレクトリからファイル一覧表示 さらに php ファイルのみに絞る   RecursiveXXXIterator に対して RegexIterator をかぶせて正規表現で絞る  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  28. 28. イテレーション中に HtmlEscapeClass HtmlEscRII extends                          RecursiveIteratorIterator { public function current() { return htmlspecialchars(   parent::current(), ENT_QUOTES, UTF-8 ); }}@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper 
  29. 29. RecursiveIteratorIteratorRecursiveIteratorIterator のメソッド(一部)current() 現在の値を返すkey() 現在のキーを返す  beginIteration() イテレーション前に実行endIteration() イテレーション終了時に実行beginChildren() 子階層イテレーション時に実行endChildren() 子階層終了時に実行 @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  30. 30. RecursiveIteratorIterator多階層の配列から入れ子テーブル html 出力current() <tr><td> value </td></tr>  beginIteration() <table>endIteration() </table>beginChildren() <table>endChildren() </table> @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  31. 31. RecursiveIteratorIterator多階層の配列から入れ子テーブル html 出力  https://gist.github.com/2768801@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  32. 32. PHP 祭り 2012 福岡 @phpmatsuri@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  33. 33. THANK YOU

×