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基礎勉強会

10,324 views

Published on

社内で行ったPHP基礎勉強会の資料です。深い内容までは踏み込んでいませんが、幅広い内容を取り上げています。

Published in: Technology
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2Qu6Caa ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❤❤❤ http://bit.ly/2Qu6Caa ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

PHP基礎勉強会

  1. 1. PHP勉強会 〜基礎編〜株式会社シーエー・アドバンス 大谷 祐司
  2. 2. はじめに今回の勉強会は、シーエー・アドバンスで採用している開発言語「PHP」について、基礎的な内容を中心に幅広い内容でお届けします。普段何気なく使用しているPHPについて、知識を整理する機会にできればと思います。
  3. 3. アジェンダ○PHPの歴史○基本的な構文/概念○拡張モジュールについて○フレームワーク○パフォーマンスチューニング○その他まめ知識
  4. 4. PHPの歴史
  5. 5. PHPの歴史突然ですが質問です。「PHP」とは何の略でしょうか?
  6. 6. PHPの歴史答え:Hypertext Preprocessor(ハイパーテキストプリプロセッサー)
  7. 7. PHPの歴史Hypertext Preprocessor⇒全然P・H・Pじゃない。。
  8. 8. PHPの歴史元々PHPは「Personal Home Page」(パーソナルホームページ)の略でしたが、1998年にリリースされたPHP3から意味が変更されました。
  9. 9. 1995年:バージョン1.0最初のバージョンは、カナダ人のラスマス・ラードフによってリリースされました。ソースコードを全て公開し、誰もが改良やバグ修正をできるようにしています。
  10. 10. 1996年:バージョン2.0SQLによるDBMSツールが統合されました。この頃のPHPは世界で数千の熱狂的なユーザを持ち、インターネットコンテンツの1%程度のシェアを持っていました。
  11. 11. 1998年:PHP3.0Zendの創業者2名によって、コード全てが書き直されました。PHP2.0系の開発は完全に停止され、新しいPHPとしてリリースされています。ユーザも増加し、世界のインターネットコンテンツの10%程度のシェアになりました。
  12. 12. 2000年:PHP4.0ZendEngineが組み込まれ、大幅な機能拡張やパフォーマンスアップが実現されています。人気言語として関連プロジェクトの開発も盛んになり、インターネットの20%程度のシェアを獲得しました。
  13. 13. 2004年:PHP5.0ZendEngineが2.0となり、より強力なプログラム言語になっています。オブジェクト指向がより一層強化され、クラスライブラリのSPLがサポートされるようになっています。
  14. 14. 2012年:PHP5.45.3から実装された名前空間、クロージャ、GC等に加え、traitやビルトインサーバなど、多くの機能が追加されています。既にPHP5.5の仕様が公開されるなど、とても開発が活発なプログラム言語です。
  15. 15. PHPのサポート現在サポートされているのはPHP5.3以降のバージョンのみで、それ以前のバージョンは対象外となっています。サポート対象外のバージョンはセキュリティパッチ等が配布されていないので注意が必要です。
  16. 16. 基本的な構文/概念
  17. 17. 処理の開始メインとなるPHPがキックされ、その処理を起点にしてプログラムの実行が開始されます。Javaのようにオブジェクト指向で全てを完結させるのではなく、手続き型の処理を起点としています。
  18. 18. 関数型とオブジェクト型PHPは関数型とオブジェクト型、両方の記述方法を使用する事ができます。PHP4までは関数型が中心でしたが、PHP5以降はオブジェクト型の機能追加が活発です。フレームワークもオブジェクト型に移行するものが多くなっています。
  19. 19. functionfunctionは下記の3つが基本になっています。「引数」「処理」「戻り値」
  20. 20. function質問:どうしてfunctionが必要なのでしょうか?
  21. 21. function答え:・処理を1カ所に切り出し分かりやすくする。・単体テストを効率化する。・同じ種類の処理を纏め、ソースの可読性を上げる。etc
  22. 22. function質問:戻り値を返さずにfunctionを抜ける方法は?
  23. 23. function答え:Exceptionを投げる。
  24. 24. Exceptionとは例外発生時に投げられるクラス。tryブロックで囲んだ部分の例外は、catchで捉えて例外処理を行う事が出来る。拡張することで、独自の例外クラスを作成することも可能。
  25. 25. 文字列の「”」と「’」PHPの文字列は、「”」と「’」のどちらでも記述することが可能です。この2つの違いは何でしょうか?
  26. 26. 文字列の「”」と「’」「”」⇒文字列中の変数を解析します。例)$name = red;echo "frame is $name";結果: frame is red
  27. 27. 文字列の「”」と「’」「’」⇒文字列中の変数を解析しません。例)$name = red;echo ‘frame is $name’;結果: frame is $name
  28. 28. ヒアドキュメントマークで囲まれた部分を文字列とします。例)$str0 = <<< DOC_ENDXXXXXXXXXXXXXDOC_END;※赤文字の部分がマーク。
  29. 29. definedefineを使用して定数を定義します。例)define(‘MY_DEFINE’, ‘AAAAA’);それでは、同じ定数を2回定義するとどうなるでしょうか?
  30. 30. define答え:2回目のdefineは無視される。defineは、同じキーで1回のみ定義が可能です。関数 defined($name)を使用して、その定数が定義済みかを確認できます。
  31. 31. 配列についてPHPの配列は、連想配列が基本です。例)$sample_array = array();$sample_array*+ = “a”;$sample_array*+ = “b”;配列の中身⇒array(0 =>“a”, 1=>”b”);
  32. 32. 配列について配列は、設定した順に値を持ちます。例)$sample_array = array();$sample_array*2+ = “a”;$sample_array*0+ = “b”;配列の中身⇒array(2 =>“a”, 0=>”b”);
  33. 33. 配列について「整数」または「文字列」をキーに持つことができます。例)$sample_array = array();$sample_array*“1”+ = “a”;$sample_array*“2”+ = “b”;配列の中身⇒array(“1”=>“a”,“2”=>”b”);
  34. 34. オブジェクトについてオブジェクトには、任意の値を設定できます。メンバ変数として定義されたものはもちろん、未定義の変数も渡すことができます。アクセスが「public」になるので要注意です。例)$sample_obj = new SampleObject();$sample_obj->no_varieble = “1”;※クラスに未定義でも指定できます。
  35. 35. constconstは、クラス内に定数を定義できます。例)Class AAA { const MY_CONST =‘const_value’;}
  36. 36. 外部ソースの読み込み外部のソースを読み込む方法がいくつか存在します。それぞれの違いを考えてみましょう。・require・require_once・include・autoload(spl_autoload_register)
  37. 37. 外部ソースの読み込み・require同じファイルを複数回読み込み⇒何度も読み込まれる。読み込みに失敗した場合⇒致命的なエラーが発生。http://php.net/manual/ja/function.require.php
  38. 38. 外部ソースの読み込み・require_once同じファイルを複数回読み込み⇒2回目以降は無視される。読み込みに失敗した場合⇒致命的なエラーが発生。http://php.net/manual/ja/function.require-once.php
  39. 39. 外部ソースの読み込み・include同じファイルを複数回読み込み⇒何度も読み込まれる。読み込みに失敗した場合⇒警告が出るが、処理は中断されず。http://php.net/manual/ja/function.include.php
  40. 40. 外部ソースの読み込み・autoload(spl_autoload_register)未定義のクラスを、呼び出したタイミングで自動的に呼び出せるようにします。クラスごとにrequire_once関数を呼び出す必要がなくなるので、コードがシンプルになります。
  41. 41. 外部ソースの読み込み・autoload(spl_autoload_register)また、スクリプト内で使用するかどうか分からないクラスをインクルードしなくても済むので処理上のオーバーヘッドが軽減します。http://php.net/manual/ja/function.spl-autoload-register.php
  42. 42. SPLSPL(Standard PHP Library)を使用すると、言語機能の拡張やデザインパターンの実装が可能になります。SPLはクラスにインタフェースとして実装します。本日はよく使われるものを紹介します。http://php.net/manual/ja/book.spl.php
  43. 43. SPLCountable:オブジェクトにcount()が使用できるようにします。例)$obj = new $obj;$count = count($obj);http://php.tonnikala.org/manual/ja/class.countable.php
  44. 44. SPLArrayAccess:オブジェクトを配列のように扱う事ができます。例)$obj = new $obj;$obj*$key+ = “testval”;$str = $obj[$key];http://php.net/manual/ja/class.arrayaccess.php
  45. 45. SPLSerializable:独自のシリアライズを実装することができます。例)$obj = new $obj;$ser = serialize($obj);$newopj = serialize(ser);http://php.net/manual/ja/class.serializable.php
  46. 46. SPLその他にも、多くのSPLライブラリが存在します。知っておくと便利なものも多いので、是非見てみてください。http://php.net/manual/ja/book.spl.php
  47. 47. ガベージコレクションPHPの変数やオブジェクトは、・参照されなくなる・unsetされるこれらの操作で破棄されます。破棄されたオブジェクトは、ガベージコレクション実行のタイミングでメモリから削除されます。
  48. 48. ガベージコレクションガベージコレクションを有効にするには、コンパイル時に「enable_gc=1」を指定します。phpinfo()では、「zend.enable_gc」で確認することができます。この設定が無効だと、メモリ使用量が大きく増加します。
  49. 49. ガベージコレクションgc_collect_cycles()を実行すると、強制的にガベージコレクションを行う事ができます。PHP5.3以上で使用する事ができます。
  50. 50. MySQLコネクションMySQLのライブラリが複数存在します。・php_mysql・php_mysqli・php_pdo・PEAR:DBそれぞれについて見ていきましょう。
  51. 51. php_mysqlPHP2.0から実装されているライブラリです。既に開発は停止されており、保守対応のみとなっています。オブジェクト指向での実装はできず、PHP5.5からは非推奨ライブラリになりました。新規の開発では使用しない方が良いでしょう。
  52. 52. php_mysqliPHP5.0以降で使用可能なライブラリです。関数とオブジェクト指向の両方で呼び出しが可能です。php_mysqlの機能を拡張しており、プリペアドステートメントの利用や複数クエリの一括実行等が可能になっています。
  53. 53. php_pdoPHPの拡張モジュールとして動作するドライバです。単独でデータベース抽象化レイヤーの機能を有しており、同一のコードで複数のDBに対応させる事ができます。オブジェクト指向に特化して実装されており、例外処理を扱う事ができます。SQLの結果をクラスで取得する事もできます。
  54. 54. PEAR:DBPHPで記述されたライブラリで、PDOなどと同様にデータベースに依存しない形でプログラムの記述が出来ます。しかし拡張ライブラリとして実装されているPDOの方が高速に動作するため、特別な理由が無ければ選択しない方が良いでしょう。
  55. 55. メモリ使用量PHPから関数を実行してメモリの使用量を確認する事ができます。memory_get_usage();⇒現在のメモリ使用量を返します。memory_peak_get_usage();⇒実行中プログラムにおける、最大時のメモリ使用量を返します。
  56. 56. 変数コンテナPHPの変数はzvalと呼ばれるコンテナに格納されています。参照数のカウンタを保持しており、参照数が0になるとガベージコレクションの対象になります。debug_zval_dump($data);⇒$dataが参照されている数を確認する事ができます。がベージコレクションの対象かを確認する事ができます。
  57. 57. 比較演算子PHPの特徴的な比較演算子を紹介します。「===」⇒型まで見て比較を行います。「strcasecmp()」⇒大文字小文字を区別しない文字列比較。「strcmp()」⇒大文字小文字を区別する文字列比較。
  58. 58. 配列演算子「$a + $b」⇒$aと$bを結合する。「 $a == $b」⇒$a と $b のキー/値のペアが等しい場合にtrue。「 $a === $b」⇒$a と$b のキー/値のペアが等しく、その並び順が等しく、 かつデータ型も等しい場合に true。
  59. 59. 文字コード文字化けを防ぐため、PHPで使用する文字コードは以下の記述を全て統一します。・php.iniのmbstring.internal_encoding・php.iniのdefault_charset・DBコネクションの文字コード (set names XX)・ソースコードの文字コード
  60. 60. phpinfo()phpinfo()を使用すると、PHPの情報を確認することができます。・PHPのバージョン。・設定ファイル「php.ini」の場所。・拡張ライブラリのフォルダ。・有効な拡張ライブラリ。etc
  61. 61. 文字列で関数名を指定する関数名を文字列として変数に代入して、()で呼び出すことができます。<?php function myfunc() { echo "call myfuncn"; } $f = "myfunc"; $f();?>
  62. 62. 文字列でクラス名を指定するクラス名を変数で指定することで。クラスをインスタンス化することができます。<?php class TestClass { echo "call myfunc"; } $classname = “TestClass”; $testClass = new $classname();?>
  63. 63. PHPのオブジェクト指向質問:オブジェクト指向はどのような言語ですか?特徴を挙げてください。
  64. 64. オブジェクト指向とはオブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方です。関連するデータの集合と、それに対する手続きを「オブジェクト」と呼ばれる一つのまとまりとして管理し、その組み合わせによってソフトウェアを構築します。
  65. 65. オブジェクト指向とは存在するオブジェクトについては、利用に際してその内部構造や動作原理の詳細を知る必要はなく、外部からメッセージを送れば機能します。大規模なソフトウェア開発において有効な考え方であるとされています。
  66. 66. 覚えておきたいクラスの用語コンストラクタデストラクタ継承実装
  67. 67. 覚えておきたいクラスの機能メンバ変数アクセッサStatic関数Formインスタンス化オブジェクトの破棄
  68. 68. 拡張モジュール
  69. 69. 標準の拡張モジュール質問:PHP標準の拡張モジュールを思いつく限り上げてください。
  70. 70. 標準の拡張モジュールpdo, mysql, openssl, curl, mysqli, gzip etc…PHPは標準で様々な拡張モジュールを使用する事ができます。
  71. 71. PEAR標準のモジュール以外にも、便利な機能を簡単に使用できる「PEAR」という拡張モジュールが存在します。
  72. 72. PEARPHP Extension and Application Repositoryの略です。コミュニティーによって運営されるプロジェクトで、1999年に創設されました。12月現在で37カテゴリ/590もの拡張ライブラリを利用する事ができます。
  73. 73. PEARミッション・再利用可能なコンポーネントを提供すること・PHP の発展に寄与すること・よい開発手法を PHP 開発者たちに広めること
  74. 74. PEARコーディングにあたり、PEAR 標準コーディング規約 (PEAR Coding Standards: PCS)が定められています。これにより、複数の開発者における共同開発が容易になり、品質が安定しています。http://pear.php.net/manual/ja/standards.php
  75. 75. PEARPEAR パッケージはすべて pear.php.netに登録され、そこからダウンロードすることができます。開発機からPEARインストール用コマンドを実行すると、容易にライブラリの追加を行う事が可能です。
  76. 76. PEAR代表的なPEARのライブラリDB(DBアクセス)Mail(メールの送信)FTP(FTPの操作)Net(ソケット通信やTelnet)
  77. 77. PECLpeclコマンドでインストール可能な、Cで書かれた拡張ライブラリ。コンパイルされているコードを実行するので、実行速度が速いのが特徴です。2012年12月現在で34カテゴリ/296の拡張パッケージを利用する事ができます。
  78. 78. PECL代表的なPECLのライブラリimagick(画像関連の操作)json(JSON関連の操作)memcached(memcachedに対する操作)oauth(Oauth認証に関する操作)
  79. 79. その他のライブラリPHPには組織やコミュニティベースでライブラリが配布されているものも多く存在します。これらはサイトからモジュールをダウンロードし、読み込むことで使用可能になります。
  80. 80. その他のライブラリ代表的なライブラリJpGraph(グラフを生成する)PHPExcel, pChart(Excel関連の操作)FPDF/TCPDF(PDF関連の操作)phpThumb/class.image(画像関連の操作)
  81. 81. おまけ:Cの拡張ライブラリ開発方法Cの拡張ライブラリは誰でも開発する事が可能です。PHPで書くよりも高速で動作するために、よりパフォーアンスが求められる拡張機能に活用される事が多いです。
  82. 82. フレームワーク
  83. 83. フレームワークとはフレームワークとは、アプリケーションの開発時に必要となる汎用的な機能を纏めて提供し、アプリケーションの土台として機能するソフトウェアです。
  84. 84. フレームワークとは質問:フレームワーク導入のメリット/デメリットを上げてみてください。
  85. 85. フレームワーク導入のメリット・汎用的機能の開発工数が抑えられる。・開発経験を持つメンバーを集めやすい。・テスト済みで、運用実績のあるシステムをすぐに作る事ができる。・MVCなど、デザインパターンに従った開発を行う事ができる。・書籍などから情報を集めやすい。
  86. 86. フレームワーク導入のデメリット・採用したものが流行によって廃れてしまう場合がある。・フレームワークがPHPのバージョンアップについていけない場合がある。・必要な機能が無い場合、フレームワーク本体に手を加えなければいけない事もある。
  87. 87. フレームワークについて現行のPHPフレームワークは、ほとんどがMVCモデルに基づいています。Model:処理の中核を担う。View:画面の表示・出力を担う。Contoroller:ViewとModelを制御する。http://e-words.jp/w/MVC.html
  88. 88. フレームワークについて今回は、PHPの代表的なフレームワークをいくつか紹介します。
  89. 89. CakePHP最新バージョン:2.2PHPバージョン:5.2以上開発元:Cakeソフトウェア財団URL:http://cakephp.jp/
  90. 90. CakePHP特徴・小・中規模開発向け・日本ではもっとも人気がある・「設定より規約」の思想のもと、多くのルールがある。自由度は高くない。
  91. 91. Symphony最新バージョン:2.1PHPバージョン:5.3以上開発元:Sensio社URL:http://symfony.com/
  92. 92. Symphony特徴・大規模重厚・多機能な分、インストールや習得に多くの時間がかかる。・シンプル・高速・対象ドメイン独立な本体の設計
  93. 93. CodeIgniter最新バージョン:2.1PHPバージョン:5.1以上開発元:EllisLabURL:http://ellislab.com/codeigniter
  94. 94. CodeIgniter特徴・軽量高速・小規模開発向け・ライセンス問題で話題になっている
  95. 95. FuelPHP最新バージョン:1.3PHPバージョン:5.3以上開発元:コミュニティ(100名以上の開発者)URL:http://www.fuelphp.com/
  96. 96. FuelPHP特徴・2011年にリリース・軽量高速・小規模開発向け・PHP5.3の機能をフル活用・MongoDB/Redisをサポート
  97. 97. ZendFramework最新バージョン:2.0PHPバージョン:5.3以上開発元:Zend社(PHP開発元)URL:http://framework.zend.com/
  98. 98. Lemonade最新バージョン:0.4PHPバージョン:5.1以上開発元:?URL:http://lemonade-php-script-creator.en.softonic.com/
  99. 99. Lemonade特徴・軽量なマイクロフレームワーク・Rubyのsinatraに影響を受けている・導入も非常に簡単で、学習コストも低い
  100. 100. Ethna最新バージョン:2.5PHPバージョン:5.0以上開発元:GREE採用実績:GREE
  101. 101. Ethna特徴・ライトウェイトなMVCフレームワーク。・似たようなコードを書かなくてよいことが目標。・国産フレームワーク
  102. 102. フレームワーク利用にあたって今後も様々なフレームワークが出てくると思いますが、目的が何かをきちんと見極めた上で選択する事が必要だと思います。またフレームワークの内部処理を理解し、処理を任せきりにしない事が大切です。
  103. 103. PHPのパフォーマンスUP (今回は2つだけ紹介します)
  104. 104. ループの条件はループの前で書くループの条件をfor文の中で行うと、都度のループ回数評価が発生します、必ずfor文の前で行うようにしましょう。
  105. 105. ループの条件はループの前で書く良い例)$roop_count = count($target_array);for ($i = 0; $i < $roop_count; $i++) { // for文中の処理}悪い例)for ($i = 0; $i < count($target_array); $i++) { // for文中の処理}
  106. 106. 中間コンパイラを導入する アクセラレータは初回実行時に、コンパイル済 のバイトコードをメモリ上にキャッシュしま す。これによって高速な実行を実現します。PHP実行イメージ 初回実行時に メモリにキャッシュ コンパイ 解析 ル PHPソースコード バイトコード 実行
  107. 107. 中間コンパイラを導入する・eAcceleratorhttp://eaccelerator.net/・APChttp://php.net/manual/ja/book.apc.php
  108. 108. おまけ:PHP認定資格
  109. 109. PHP資格PHP技術者認定試験という、PHPのスキルを認定する資格が存在します。「認定者の雇用機会」や「認定者が所属する会社のビジネスチャンス」の拡大を図ることを目的として、2011年に開始されました。http://www.phpexam.jp/
  110. 110. PHP資格初級:PHPプログラミングの基本知識を問う試験受験料:12,600円合格率:68%
  111. 111. PHP資格上級:言語仕様から実用的なプログラミングテクニックまでの知識を問う試験受験料:15,750円合格率:10%
  112. 112. PHP資格ウィザード:PHPの発展に貢献できる知識と発想力を持つこと受験料:無料合格率:0%
  113. 113. 勉強会は以上になります。ご清聴ありがとうございました。

×