php超入門@ll温泉

74
Copyright © 2008 Sotaro KARASAWA. PHPユーザー会 / nequal sotarok PHP超入門 id:sotarok

Upload: sotaro-karasawa

Post on 18-Dec-2014

3.488 views

Category:

Technology


3 download

DESCRIPTION

LL温泉でのPHP入門講座

TRANSCRIPT

Page 1: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPユーザー会 / nequalsotarok

PHP超入門

id:sotarok

Page 2: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

アジェンダ

• PHPとは• PHPの学び方• PHP超入門• 参考資料

Page 3: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPとは

Page 4: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPとは• PHPの紹介• PHPを使うと良いところ・悪いところ

Page 5: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPの紹介• PHP: Hypertext Processor• http://www.php.net/• ほとんどウェブのために存在しているプログラミング言語

Page 6: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPを使うと良いところ・悪いところ• PHPのよさ

– カンタン• 覚えやすい• 1ページだけのちょいプログラムから、大規模フレームワークを使った開発まで

– カンタンに記述可能– 本格的にやろうとすればできる

– 速い• ウェブプログラムの実行速度としては他の言語に比べてすごく速い

– 実績も多く情報も豊富

Page 7: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPを使うと良いところ・悪いところ• PHPの悪いところ

– ところどころ存在するバッドノウハウ• mb_send_mailつかっちゃだめだよ!とか

– php.ini設定がおバカ– 言語に設計思想が・・・

Page 8: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

つまり

• 純粋に「プログラミング」を学ぶ言語ではない– 何かを実践する場、作りたいものを表現する場

特特特特にそれがにそれがにそれがにそれがウェブウェブウェブウェブのののの世界世界世界世界だとだとだとだと強力強力強力強力

Page 9: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPの学び方

Page 10: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPの学び方• PHPを使う 3つのコツ• マニュアルの読み方

Page 11: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPを学ぶ3つのコツその1• 文法を覚える• ;• $• その他

Page 12: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPを学ぶ3つのコツその2• マニュアルを極める

– PHPの標準関数の充実さは異常!– PHPのマニュアルの充実さは異常!

• (m-takagi氏にも大感謝)– これがあるから、ネットさえあればどこからでも

• HTMLをダウンロードしておけまローカルでも– 関数名なんて覚える必要ナシ

Page 13: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPを学ぶ3つのコツその3• 注意しなきゃいけない関数だけ覚える

– mb_* 系関数• 内部エンコード・ソースコードのエンコードに注意

– 脆弱性につながるもの• htmlspecialchars• 内部エンコードに注意

– バージョンによって戻り値が違ったり– その他…– ハマハマハマハマることによりどんどんることによりどんどんることによりどんどんることによりどんどん覚覚覚覚えるえるえるえる

• 探探探探せばせばせばせば情報情報情報情報もよくもよくもよくもよく出出出出てくるてくるてくるてくる

Page 14: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

マニュアルの読み方

• 検索– php.net/mb_strlen

• mb_strlenのマニュアルページにリダイレクトされる

• 関数がなければ検索結果が表示される• 引数・戻り値・サンプルのチェック

Page 15: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

マニュアルの読み方

• 検索– php.net/mb_strlen

• mb_strlenのマニュアルページにリダイレクトされる

• 関数がなければ検索結果が表示される• 引数・戻り値・サンプルのチェック

Page 16: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門

Page 17: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 基本構文• 配列• 関数• クラスとオブジェクト指向

Page 18: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向

Page 19: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP基本のキ• PHPプログラムの書き方• 実行のさせ方

Page 20: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPプログラムの書き方

<?php// ここがここがここがここが実装実装実装実装

?>

•<?php ?> で囲まれた部分がPHPのコードのブロックとなる

Page 21: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPプログラムの書き方

<?phpecho “Hello World¥n”;?>

• 文の最後はセミコロン;

Page 22: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

実行のさせ方

<?php// ここがここがここがここが実装実装実装実装

?>

• % php filename.php

Page 23: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPプログラムのコメントアウト<?php// 1111行行行行コメントコメントコメントコメント

# これもこれもこれもこれも1111行行行行コメントコメントコメントコメント

/*これがこれがこれがこれがブロックコメントブロックコメントブロックコメントブロックコメント

*/?>

実行結果実行結果実行結果実行結果

% php 01_comment.php%

Page 24: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPプログラムの書き方 出力

<?phpecho "Hello World¥n";?>

実行結果実行結果実行結果実行結果

% php 02_hello.phpHello World

Page 25: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPプログラムの書き方裏技Hello World

実行結果実行結果実行結果実行結果

% php 03_hello.phpHello World

Page 26: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向

Page 27: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

変数

• 変数に「型」はない– 自動で決まる

• 変数の頭には $ をつける• 気にしないとほとんどが文字列扱い

– (文字列の連結はドット「.」)– intなども連結したりすると勝手に文字列扱い

Page 28: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

変数

<?php$hoge = 1;$fuga = "test";echo $hoge . "¥n";echo $fuga . "¥n";

実行結果実行結果実行結果実行結果

% php 04_var.php1test

Page 29: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

演算子

• < > <= >=• == ===• || &&

Page 30: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

厳密な比較

• ==– 値を比較 (型自動変換)– "12aaaaa" == 12 : true

• ===– 型までチェック– "12aaaaa" === 12 : false

Page 31: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

おまけ。変数の厳密な出力

• var_dumpを使う– 変数の型も出力してくれる– 配列やオブジェクトもOK

• デバッグには、echoやprintじゃなくてvar_dump

<?php$hoge = 1;var_dump($hoge);

実行結果実行結果実行結果実行結果

% php 05_vd.phpint(1)

Page 32: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 配列 (超重要)• 基本構文• 関数• クラスとオブジェクト指向

Page 33: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

配列

• 配列– 初期化にサイズの指定不要– 型の指定も不要:型はごっちゃまぜOK– 配列も連想配列(ハッシュ)もごっちゃまぜOK

• 配列の要素へのアクセス– 添え字を指定– キー(文字列)を指定

• 配列の初期化– array();

Page 34: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

配列

<?php$hoge = array(); //初期化初期化初期化初期化

$hoge[0] = 1;$hoge[1] = 2; $hoge['key'] = "value"; // 連想配列連想配列連想配列連想配列

var_dump($hoge);

Page 35: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

配列

<?php$hoge = array(); //初期化初期化初期化初期化

$hoge[0] = 1;$hoge[1] = 2; $hoge['key'] = "value"; // 連想配列連想配列連想配列連想配列

var_dump($hoge);実行結果実行結果実行結果実行結果

% php 06_array.phparray(3) {[0]=>int(1)[1]=>int(2)["key"]=>string(5) "value"

}

Page 36: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

配列

<?php// 初期化時初期化時初期化時初期化時にににに代入代入代入代入のののの例例例例

// これはこれはこれはこれは先先先先ほどのほどのほどのほどの配列配列配列配列とととと同同同同じじじじ

$hoge = array(0 => 1, // 配列配列配列配列のののの添添添添ええええ字字字字 => 値値値値 というというというという風風風風にににに表現表現表現表現

1 => 2,'key' => "value",

);

Page 37: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPにおいて配列は大変重要• 何かの戻り値• オプション指定

Page 38: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向

Page 39: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

基本構文

• if else elseif• while• do-while• for• foreach• switch case• break continue• require require_once• include include_once

Page 40: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

基本構文

• if else elseif• while• do-while• for• foreach• switch case• break continue• require require_once• include include_once

Page 41: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

foreach• 配列をグリグリまわす。最初から最後まで。• イテレーターをグリグリまわす。

– 配列だろうが– 連想配列だろうが– なんだろうが– とにかくまわす

Page 42: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

foreachの使い方foreach ($array as $val) {// なにかしらの処理

}

または

foreach ($array as $key => $val) {// なにかしらの処理

}

Page 43: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

foreach<?php$array = array(

0 => 1,1 => 2,'key' => "value",

);foreach ($array as $val) {

echo $val . "¥n";}

Page 44: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

foreach<?php$array = array(

0 => 1,1 => 2,'key' => "value",

);foreach ($array as $val) {

echo $val . "¥n";}

実行結果実行結果実行結果実行結果

% php 07_foreach.php12value

Page 45: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

foreach (keyも使う)<?php$array = array(

0 => 1,1 => 2,'key' => "value",

);foreach ($array as $key => $val) {

echo $key . " => " . $val . "¥n";}

実行結果実行結果実行結果実行結果

% php 08_foreach.php0 => 11 => 2key => value

Page 46: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

foreach (イテレーター)• Iterator Interface を実装したクラスなら foreachできる

– 実装しないといけないメソッド• next• valid• current• rewind• key

Page 47: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

require/include• 外部のファイルを読み込む

• require– ファイルが読み込めない場合 Fatal Error

• include– ファイルが読み込めない場合Warning

Page 48: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

include<?phpinclude '08_foreach.php';

実行結果実行結果実行結果実行結果

% php 09_include.php0 => 11 => 2key => value

Page 49: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

include<?phpinclude '09_foreach.php';echo "end¥n";

Page 50: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

include<?phpinclude '09_foreach.php';echo "end¥n";

実行結果実行結果実行結果実行結果

% php 10_include.phpPHP Warning: include(09_foreach.php): failed to open stream: Nosuch file or directory in /home/sotaro/php/LLOnsen/10_include.php on line 3Warning: include(09_foreach.php): failed to open stream: No suchfile or directory in /home/sotaro/php/LLOnsen/10_include.php on line 3PHP Warning: include(): Failed opening '09_foreach.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /home/sotaro/php/LLOnsen/10_include.php on line 3Warning: include(): Failed opening '09_foreach.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /home/sotaro/php/LLOnsen/10_include.php on line 3end

Page 51: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

include<?phprequire '09_foreach.php';echo "end¥n";

実行結果実行結果実行結果実行結果

% php 11_require.phpPHP Warning: require(09_foreach.php): failed to open stream: Nosuch file or directory in /home/sotaro/php/LLOnsen/11_require.php on line 3Warning: require(09_foreach.php): failed to open stream: No suchfile or directory in /home/sotaro/php/LLOnsen/11_require.php on line 3PHP Fatal error: require(): Failed opening required '09_foreach.php' (include_path='.:/usr/share/pear:/usr/share/php') in /home/sotaro/php/LLOnsen/11_require.php on line 3Fatal error: require(): Failed opening required '09_foreach.php'(include_path='.:/usr/share/pear:/usr/share/php') in /home/sotaro/php/LLOnsen/11_require.php on line 3

Page 52: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

*_once• 同じファイルは1度しか呼ばれない<?phpinclude '08_foreach.php'; // 読読読読みみみみ込込込込まれるまれるまれるまれる

include '08_foreach.php'; // 読読読読みみみみ込込込込まれるまれるまれるまれる

<?phpinclude_once '08_foreach.php'; // 読読読読みみみみ込込込込まれるまれるまれるまれる

include_once '08_foreach.php'; // 読読読読みみみみ込込込込まれないまれないまれないまれない

Page 53: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

include/require どっちをつかう?• ほとんど require_once

– 読み込めなくても進んで大丈夫なんてプログラムはほとんどない

Page 54: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向

Page 55: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

関数

function 関数名 (引数1 [, 引数2 …] ) {// 実装

}

で定義。

関数名(引数…);

でコール

Page 56: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

関数

• 引数の型宣言も戻り値の型宣言も不要• 関数の中ではスコープが限定される

– 例えば関数の外で定義した $hogeは関数の中では利用不可能

Page 57: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

関数

<?phpfunction greeting($name) {

echo "Hello " . $name . "¥n";}greeting("sotarok");

実行結果実行結果実行結果実行結果

% php 12_function.phpHello sotarok

Page 58: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

関数 return<?phpfunction greeting($name) {

return "Hello " . $name . "¥n";}echo greeting("sotarok");

実行結果実行結果実行結果実行結果

% php 13_function.phpHello sotarok

Page 59: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

関数オプション引数

<?phpfunction greeting($name = "suzuki") {

return "Hello " . $name . "¥n";}echo greeting();echo greeting("sotarok");

実行結果実行結果実行結果実行結果

% php 14_function.phpHello suzukiHello sotarok

Page 60: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

可変関数

• 変数を関数名としてコール可能• 後ろにカッコがついていれば、関数とみなす

Page 61: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

可変関数

<?phpfunction greeting($name = "suzuki") {

return "Hello " . $name . "¥n";}$func = "greeting";echo $func("sotarok");

実行結果実行結果実行結果実行結果

% php 15_function.phpHello sotarok

Page 62: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向

Page 63: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPのオブジェクト指向• クラス• 継承• オーバーロード• アブストラクトクラス• インターフェース• メソッド・プロパティのアクセス権

Page 64: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

クラスの作り方

<?phpclass Greeting{

public function hello($name = "suzuki"){

return "Hello " . $name . "¥n";}

}

Page 65: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

クラスの使い方

<?phpclass Greeting{

public function hello($name = "suzuki"){

return "Hello " . $name . "¥n";}

}

<?php$obj = new Greeting();echo $obj->hello();

Page 66: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

コンストラクタ/デストラクタ<?phpclass Greeting{

public function __construct(){

echo "object create!¥n";}public function hello($name = "suzuki"){

return "Hello " . $name . "¥n";}

}

Page 67: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

継承・オーバーライド

<?phpclass Hello extends Greeting{

public function hello($name = "suzuki"){

return "How are you " . $name . " ?¥n";}

}

Page 68: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

PHPのオブジェクトについて• http://www.php.net/manual/ja/language.oop5.php

Page 69: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

参考資料

Page 70: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

参考資料 (1) まずはここをチェック• PHP マニュアル

– http://www.php.net/manual/ja/• 日本PHPユーザー会

– http://www.php.gr.jp/– あまり情報は豊富ではない(ぉ

Page 71: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

参考資料 (2) 本がほしいなら• はじめてのPHPプログラミング基本編

– 著:下岡秀幸、中村悟– 出版:秀和システム

• ノン・プログラマのためのPHP入門 10日間コース– (とはいえ、実務向け)– 著:アシアル(株)、海原才人、笹亀弘– 出版:翔泳社

Page 72: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

参考資料 (3) 勉強会やコミュニティへ参加• events.php.gr.jp

– http://events.php.gr.jp/– PHPユーザー会が運営しているPHP関連のイベント情報サイト

– PHP勉強会(毎月)や各フレームワークの勉強会も• PHPカンファレンス

– 毎年7~8月ごろ開催• IRC

– %PHPStudy (wide)

Page 73: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

参考資料 (4) アンテナを伸ばす• ブログをチェック

– PHPユーザー会の planet (http://planet.php.gr.jp/)– PHPユーザーのいろいろな人のブログがある

• 雑誌のコラムなど– 最新の情報がいろいろと載っている– WEB+DB Pressなど

• 身近なPHPユーザーをTwitterやWassrでフォロー

Page 74: PHP超入門@LL温泉

Copyright © 2008 Sotaro KARASAWA.

おつかれさまでした

• わからないことがあればsotarokへなんでも聞いてください!