php超入門@ll温泉
DESCRIPTION
LL温泉でのPHP入門講座TRANSCRIPT
Copyright © 2008 Sotaro KARASAWA.
PHPユーザー会 / nequalsotarok
PHP超入門
id:sotarok
Copyright © 2008 Sotaro KARASAWA.
アジェンダ
• PHPとは• PHPの学び方• PHP超入門• 参考資料
Copyright © 2008 Sotaro KARASAWA.
PHPとは
Copyright © 2008 Sotaro KARASAWA.
PHPとは• PHPの紹介• PHPを使うと良いところ・悪いところ
Copyright © 2008 Sotaro KARASAWA.
PHPの紹介• PHP: Hypertext Processor• http://www.php.net/• ほとんどウェブのために存在しているプログラミング言語
Copyright © 2008 Sotaro KARASAWA.
PHPを使うと良いところ・悪いところ• PHPのよさ
– カンタン• 覚えやすい• 1ページだけのちょいプログラムから、大規模フレームワークを使った開発まで
– カンタンに記述可能– 本格的にやろうとすればできる
– 速い• ウェブプログラムの実行速度としては他の言語に比べてすごく速い
– 実績も多く情報も豊富
Copyright © 2008 Sotaro KARASAWA.
PHPを使うと良いところ・悪いところ• PHPの悪いところ
– ところどころ存在するバッドノウハウ• mb_send_mailつかっちゃだめだよ!とか
– php.ini設定がおバカ– 言語に設計思想が・・・
Copyright © 2008 Sotaro KARASAWA.
つまり
• 純粋に「プログラミング」を学ぶ言語ではない– 何かを実践する場、作りたいものを表現する場
特特特特にそれがにそれがにそれがにそれがウェブウェブウェブウェブのののの世界世界世界世界だとだとだとだと強力強力強力強力
Copyright © 2008 Sotaro KARASAWA.
PHPの学び方
Copyright © 2008 Sotaro KARASAWA.
PHPの学び方• PHPを使う 3つのコツ• マニュアルの読み方
Copyright © 2008 Sotaro KARASAWA.
PHPを学ぶ3つのコツその1• 文法を覚える• ;• $• その他
Copyright © 2008 Sotaro KARASAWA.
PHPを学ぶ3つのコツその2• マニュアルを極める
– PHPの標準関数の充実さは異常!– PHPのマニュアルの充実さは異常!
• (m-takagi氏にも大感謝)– これがあるから、ネットさえあればどこからでも
• HTMLをダウンロードしておけまローカルでも– 関数名なんて覚える必要ナシ
Copyright © 2008 Sotaro KARASAWA.
PHPを学ぶ3つのコツその3• 注意しなきゃいけない関数だけ覚える
– mb_* 系関数• 内部エンコード・ソースコードのエンコードに注意
– 脆弱性につながるもの• htmlspecialchars• 内部エンコードに注意
– バージョンによって戻り値が違ったり– その他…– ハマハマハマハマることによりどんどんることによりどんどんることによりどんどんることによりどんどん覚覚覚覚えるえるえるえる
• 探探探探せばせばせばせば情報情報情報情報もよくもよくもよくもよく出出出出てくるてくるてくるてくる
Copyright © 2008 Sotaro KARASAWA.
マニュアルの読み方
• 検索– php.net/mb_strlen
• mb_strlenのマニュアルページにリダイレクトされる
• 関数がなければ検索結果が表示される• 引数・戻り値・サンプルのチェック
Copyright © 2008 Sotaro KARASAWA.
マニュアルの読み方
• 検索– php.net/mb_strlen
• mb_strlenのマニュアルページにリダイレクトされる
• 関数がなければ検索結果が表示される• 引数・戻り値・サンプルのチェック
Copyright © 2008 Sotaro KARASAWA.
PHP超入門
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 基本構文• 配列• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
PHP基本のキ• PHPプログラムの書き方• 実行のさせ方
Copyright © 2008 Sotaro KARASAWA.
PHPプログラムの書き方
<?php// ここがここがここがここが実装実装実装実装
?>
•<?php ?> で囲まれた部分がPHPのコードのブロックとなる
Copyright © 2008 Sotaro KARASAWA.
PHPプログラムの書き方
<?phpecho “Hello World¥n”;?>
• 文の最後はセミコロン;
Copyright © 2008 Sotaro KARASAWA.
実行のさせ方
<?php// ここがここがここがここが実装実装実装実装
?>
• % php filename.php
Copyright © 2008 Sotaro KARASAWA.
PHPプログラムのコメントアウト<?php// 1111行行行行コメントコメントコメントコメント
# これもこれもこれもこれも1111行行行行コメントコメントコメントコメント
/*これがこれがこれがこれがブロックコメントブロックコメントブロックコメントブロックコメント
*/?>
実行結果実行結果実行結果実行結果
% php 01_comment.php%
Copyright © 2008 Sotaro KARASAWA.
PHPプログラムの書き方 出力
<?phpecho "Hello World¥n";?>
実行結果実行結果実行結果実行結果
% php 02_hello.phpHello World
Copyright © 2008 Sotaro KARASAWA.
PHPプログラムの書き方裏技Hello World
実行結果実行結果実行結果実行結果
% php 03_hello.phpHello World
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
変数
• 変数に「型」はない– 自動で決まる
• 変数の頭には $ をつける• 気にしないとほとんどが文字列扱い
– (文字列の連結はドット「.」)– intなども連結したりすると勝手に文字列扱い
Copyright © 2008 Sotaro KARASAWA.
変数
<?php$hoge = 1;$fuga = "test";echo $hoge . "¥n";echo $fuga . "¥n";
実行結果実行結果実行結果実行結果
% php 04_var.php1test
Copyright © 2008 Sotaro KARASAWA.
演算子
• < > <= >=• == ===• || &&
Copyright © 2008 Sotaro KARASAWA.
厳密な比較
• ==– 値を比較 (型自動変換)– "12aaaaa" == 12 : true
• ===– 型までチェック– "12aaaaa" === 12 : false
Copyright © 2008 Sotaro KARASAWA.
おまけ。変数の厳密な出力
• var_dumpを使う– 変数の型も出力してくれる– 配列やオブジェクトもOK
• デバッグには、echoやprintじゃなくてvar_dump
<?php$hoge = 1;var_dump($hoge);
実行結果実行結果実行結果実行結果
% php 05_vd.phpint(1)
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 配列 (超重要)• 基本構文• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
配列
• 配列– 初期化にサイズの指定不要– 型の指定も不要:型はごっちゃまぜOK– 配列も連想配列(ハッシュ)もごっちゃまぜOK
• 配列の要素へのアクセス– 添え字を指定– キー(文字列)を指定
• 配列の初期化– array();
Copyright © 2008 Sotaro KARASAWA.
配列
<?php$hoge = array(); //初期化初期化初期化初期化
$hoge[0] = 1;$hoge[1] = 2; $hoge['key'] = "value"; // 連想配列連想配列連想配列連想配列
var_dump($hoge);
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"
}
Copyright © 2008 Sotaro KARASAWA.
配列
<?php// 初期化時初期化時初期化時初期化時にににに代入代入代入代入のののの例例例例
// これはこれはこれはこれは先先先先ほどのほどのほどのほどの配列配列配列配列とととと同同同同じじじじ
$hoge = array(0 => 1, // 配列配列配列配列のののの添添添添ええええ字字字字 => 値値値値 というというというという風風風風にににに表現表現表現表現
1 => 2,'key' => "value",
);
Copyright © 2008 Sotaro KARASAWA.
PHPにおいて配列は大変重要• 何かの戻り値• オプション指定
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
基本構文
• if else elseif• while• do-while• for• foreach• switch case• break continue• require require_once• include include_once
Copyright © 2008 Sotaro KARASAWA.
基本構文
• if else elseif• while• do-while• for• foreach• switch case• break continue• require require_once• include include_once
Copyright © 2008 Sotaro KARASAWA.
foreach• 配列をグリグリまわす。最初から最後まで。• イテレーターをグリグリまわす。
– 配列だろうが– 連想配列だろうが– なんだろうが– とにかくまわす
Copyright © 2008 Sotaro KARASAWA.
foreachの使い方foreach ($array as $val) {// なにかしらの処理
}
または
foreach ($array as $key => $val) {// なにかしらの処理
}
Copyright © 2008 Sotaro KARASAWA.
foreach<?php$array = array(
0 => 1,1 => 2,'key' => "value",
);foreach ($array as $val) {
echo $val . "¥n";}
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
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
Copyright © 2008 Sotaro KARASAWA.
foreach (イテレーター)• Iterator Interface を実装したクラスなら foreachできる
– 実装しないといけないメソッド• next• valid• current• rewind• key
Copyright © 2008 Sotaro KARASAWA.
require/include• 外部のファイルを読み込む
• require– ファイルが読み込めない場合 Fatal Error
• include– ファイルが読み込めない場合Warning
Copyright © 2008 Sotaro KARASAWA.
include<?phpinclude '08_foreach.php';
実行結果実行結果実行結果実行結果
% php 09_include.php0 => 11 => 2key => value
Copyright © 2008 Sotaro KARASAWA.
include<?phpinclude '09_foreach.php';echo "end¥n";
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
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
Copyright © 2008 Sotaro KARASAWA.
*_once• 同じファイルは1度しか呼ばれない<?phpinclude '08_foreach.php'; // 読読読読みみみみ込込込込まれるまれるまれるまれる
include '08_foreach.php'; // 読読読読みみみみ込込込込まれるまれるまれるまれる
<?phpinclude_once '08_foreach.php'; // 読読読読みみみみ込込込込まれるまれるまれるまれる
include_once '08_foreach.php'; // 読読読読みみみみ込込込込まれないまれないまれないまれない
Copyright © 2008 Sotaro KARASAWA.
include/require どっちをつかう?• ほとんど require_once
– 読み込めなくても進んで大丈夫なんてプログラムはほとんどない
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
関数
function 関数名 (引数1 [, 引数2 …] ) {// 実装
}
で定義。
関数名(引数…);
でコール
Copyright © 2008 Sotaro KARASAWA.
関数
• 引数の型宣言も戻り値の型宣言も不要• 関数の中ではスコープが限定される
– 例えば関数の外で定義した $hogeは関数の中では利用不可能
Copyright © 2008 Sotaro KARASAWA.
関数
<?phpfunction greeting($name) {
echo "Hello " . $name . "¥n";}greeting("sotarok");
実行結果実行結果実行結果実行結果
% php 12_function.phpHello sotarok
Copyright © 2008 Sotaro KARASAWA.
関数 return<?phpfunction greeting($name) {
return "Hello " . $name . "¥n";}echo greeting("sotarok");
実行結果実行結果実行結果実行結果
% php 13_function.phpHello sotarok
Copyright © 2008 Sotaro KARASAWA.
関数オプション引数
<?phpfunction greeting($name = "suzuki") {
return "Hello " . $name . "¥n";}echo greeting();echo greeting("sotarok");
実行結果実行結果実行結果実行結果
% php 14_function.phpHello suzukiHello sotarok
Copyright © 2008 Sotaro KARASAWA.
可変関数
• 変数を関数名としてコール可能• 後ろにカッコがついていれば、関数とみなす
Copyright © 2008 Sotaro KARASAWA.
可変関数
<?phpfunction greeting($name = "suzuki") {
return "Hello " . $name . "¥n";}$func = "greeting";echo $func("sotarok");
実行結果実行結果実行結果実行結果
% php 15_function.phpHello sotarok
Copyright © 2008 Sotaro KARASAWA.
PHP超入門• 基本のキ• 変数・演算子• 配列• 基本構文• 関数• クラスとオブジェクト指向
Copyright © 2008 Sotaro KARASAWA.
PHPのオブジェクト指向• クラス• 継承• オーバーロード• アブストラクトクラス• インターフェース• メソッド・プロパティのアクセス権
Copyright © 2008 Sotaro KARASAWA.
クラスの作り方
<?phpclass Greeting{
public function hello($name = "suzuki"){
return "Hello " . $name . "¥n";}
}
Copyright © 2008 Sotaro KARASAWA.
クラスの使い方
<?phpclass Greeting{
public function hello($name = "suzuki"){
return "Hello " . $name . "¥n";}
}
<?php$obj = new Greeting();echo $obj->hello();
Copyright © 2008 Sotaro KARASAWA.
コンストラクタ/デストラクタ<?phpclass Greeting{
public function __construct(){
echo "object create!¥n";}public function hello($name = "suzuki"){
return "Hello " . $name . "¥n";}
}
Copyright © 2008 Sotaro KARASAWA.
継承・オーバーライド
<?phpclass Hello extends Greeting{
public function hello($name = "suzuki"){
return "How are you " . $name . " ?¥n";}
}
Copyright © 2008 Sotaro KARASAWA.
PHPのオブジェクトについて• http://www.php.net/manual/ja/language.oop5.php
Copyright © 2008 Sotaro KARASAWA.
参考資料
Copyright © 2008 Sotaro KARASAWA.
参考資料 (1) まずはここをチェック• PHP マニュアル
– http://www.php.net/manual/ja/• 日本PHPユーザー会
– http://www.php.gr.jp/– あまり情報は豊富ではない(ぉ
Copyright © 2008 Sotaro KARASAWA.
参考資料 (2) 本がほしいなら• はじめてのPHPプログラミング基本編
– 著:下岡秀幸、中村悟– 出版:秀和システム
• ノン・プログラマのためのPHP入門 10日間コース– (とはいえ、実務向け)– 著:アシアル(株)、海原才人、笹亀弘– 出版:翔泳社
Copyright © 2008 Sotaro KARASAWA.
参考資料 (3) 勉強会やコミュニティへ参加• events.php.gr.jp
– http://events.php.gr.jp/– PHPユーザー会が運営しているPHP関連のイベント情報サイト
– PHP勉強会(毎月)や各フレームワークの勉強会も• PHPカンファレンス
– 毎年7~8月ごろ開催• IRC
– %PHPStudy (wide)
Copyright © 2008 Sotaro KARASAWA.
参考資料 (4) アンテナを伸ばす• ブログをチェック
– PHPユーザー会の planet (http://planet.php.gr.jp/)– PHPユーザーのいろいろな人のブログがある
• 雑誌のコラムなど– 最新の情報がいろいろと載っている– WEB+DB Pressなど
• 身近なPHPユーザーをTwitterやWassrでフォロー
Copyright © 2008 Sotaro KARASAWA.
おつかれさまでした
• わからないことがあればsotarokへなんでも聞いてください!