超初心者向け! PHP勉強法と
プログラミング基礎の基礎
2013.06.01
すぎもと ひろゆき
PHPカンファレンス関西2013
(セッション B-1)
自己紹介
すぎもと ひろゆき
杉 本 展 将
下の名前をググってみた
閉 店
出典: 食べログ 展将ラーメン亭
photo by http://tabelog.com/tottori/A3103/A310301/31000724/dtlphotolst/4/ (2013.06.01)
続・自己紹介
• 株式会社ウィズテクノロジー 代表取締役
• デジタルハリウッド大学院 客員教授
• デジタルハリウッド大阪校 プログラミング系講師
• PHPカンファレンス関西 実行委員
facebook.com/hiroyuki.sugimoto @tenshow
本日の内容
• PHPに関する基礎知識
• デモ x 基本文法解説
• データ構造
• 変数、配列
• 関数の使い方
• 制御構造
• 分岐処理、繰り返し処理
プログラミング学習の壁
エラーが出て動か
ない・嫌になる
本を1冊勉強したけど、
ゼロからプログラム書けない
命令をどう使うか
イメージ沸かない
そもそも意味が
分からない
脱初心者への道
文法・プログラム
の流れが分かる
プログラムが改
造できる
プログラムを真
似て作れる
Level: 1
Level: 2
Level: 3
~ PHPに関する基礎知識 ~
PHPの開発に必要なもの
• PHP本体
• Webサーバ
• Apache, NginXなど
• データベース
• MySQL, PostgreSQL
• テキストエディタ
• Dreamweaver, PhpStorm
セットになった
・XAMPP
Apache + MySQL + PHP
・MAMP(Mac Only)
を使うと楽ちん!
Webページが表示される仕組み
<html>
<head><title>Web Page</title></head>
<body>
<h1>Hello!</h1>
</body>
</html>
Webサーバ
Webサーバソフト
Hello!
Webブラウザ
<Webサーバソフト>
・Apache
・Nginx
・IIS
リクエスト
レスポンス
PHPページが表示される仕組み
<html>
<head><title>PHP Page</title></head>
<body>
<?php
echo “Hello PHP!”;
?>
</body>
</html>
Webサーバ
Webサーバソフト + PHP
Hello PHP!
Webブラウザ
リクエスト
レスポンス
<html>
<head><title>PHP Page</title></head>
<body>
Hello PHP!
</body>
</html>
PHPの基本ルール
• <?php から ?>の間にプログラムを書く
• 命令は半角文字を使う
• 命令の最後には; (セミコロン) を書く
• ファイル名は英数字記号、拡張子は「.php」
PHPのエラーメッセージ
1 <html>
2 <head><title>PHP Page</title></head>
3 <body>
4 <?php
5 echo “Hello PHP!”:
6 ?>
7 </body>
8 </html>
Parse error:
→ エラーの種類 (xxx error:エラー, Warning: 警告, Notice: 注意)
syntax error, unexpected ':', expecting ',' or ';'
→ エラーの詳細メッセージ
in C:¥xampp¥htdocs¥loto7¥first.php
→ 対象ファイル名
on line 5
→ エラー発生の行番号
← セミコロンが
コロンになっている
first.php
~ デモ x 文法解説 ~
今から作るもの
注意!
• ソースコードは公開します
• 予想が外れても一切責任は持ちません!
• でも当たったらこっそり教えて下さいm(_ _)m
プログラムがやってること
入力
処理
出力
・フォームからの入力を受けとる
・ファイルを読み込む
・計算をする
・データベースに登録する
・ブラウザに表示する
ラッキー方位を表示
• 1~4の乱数を作る
• 1 → 北, 2 → 南, 3 → 東, 4 → 西
変数 関数 分岐処理
変数とは
• データ(値)を記憶しておく入れ物
• $変数名
• 変数にデータを入れる = 代入
• 1つの変数には1つのデータ
<?php
$num = 5;
?>
5
$num
変数名
• ルール
• 使用できる文字は半角英数とアンダースコア(_)
• 1文字目は数字が使用できない
• 大文字小文字を区別する
• 付け方
• 何のデータが入るのかを分かる名前にする
• $user_id, $itemPrice
文字の出力
• echo
• 文字を出力する場合は’か”で囲む
• echoの後ろに変数を書くと、変数の中身が出力
• print
• echoとほぼ同じ
関数
• データを受け取り、処理を行なって結果を返す
• 他の処理から使うことができる → 関数呼び出し
• ビルトイン関数
• 日付・時刻・カレンダー、テキスト処理
• メール送信、画像処理
• ファイル操作、データベース
関数呼び出しの動作
関数
引数
引数
戻り値
関数呼び出し
引数(ひきすう) – 関数に渡す値
・引数が無い場合がある
・引数は複数の場合がある
戻り値/返り値 – 関数に結果値
・戻り値は無い場合がある
関数呼び出しの動作
rand関数
1
4
3
$dir = rand(1, 4)
[戻り値を入れる変数] = 関数名([引数, 引数]);
PHP公式マニュアル
• PHPマニュアル
• http://www.php.net/manual/ja/
• 関数リファレンス
• http://www.php.net/manual/ja/funcref.php
• 関数名が分かっている場合
• http://php.net/関数名
比較演算子
• 2つの値を比較し、結果をtrueかfalseで表す
比較演算子 意味 例と結果 ($a = 5, $b = 8)
== 等しい $a == $b → false
!= <> 等しくない $a != $b → true
< より小さい $a < $b → true
> より大きい $a > $b → false
<= 以下 $a <= $b → true
=> 以上 $a => $b → false
4 < 5 → true (真)
3 > 8 → false (偽)
true/false (真偽値)
制御構造:分岐処理
• if
• switch
<分岐処理>
処理1 処理2
条件
条件によりどちらかの
処理を実行
ifの構文(1)
if (条件式) {
条件式がtrueの時の処理
}
ifの構文(2)
if (条件式) {
条件式がtrueの時の処理
} else {
条件式がfalseの時の処理
}
ifの構文(3)
if (条件式1) {
条件式1がtrueの時の処理
} else if (条件式2) {
条件式2がfalseの時の処理
} else {
条件式1と2がfalseの時の処理
}
switchの構文
switch (変数) {
case 値1:
変数が値1と一致する時の処理
break;
case 値2:
変数が値2と一致する時の処理
break;
default:
変数どのcaseにも一致しない時の処理
break;
}
ifとswitch
if ($dir == 1) {
$dir_str = “北”;
} else if ($dir == 2) {
$dir_str = “南”;
} else if ($dir == 3) {
$dir_str = “東”;
} else if ($dir == 4) {
$dir_str = “西";
}
switch ($dir) {
case 1:
$dir_str = “北”;
break;
case 2:
$dir_str = “南”;
break;
case 3:
$dir_str = “東”;
break;
case 4:
$dir_str = “西”;
break;
}
コードをどこに書くか
<?php
// 入力の受け取り・処理など
// 表示する内容を変数に入れる
?>
<html>
<head>
<body>
<div id=“id”><?php echo $id; ?></div>
<div id=“name”>
<?php echo $nanme; ?>
</div>
</body>
</html>
金運を表示
• 1~5の乱数を作る
• 乱数の数だけ★を表示
変数 関数
繰り返し
処理
制御構造:繰り返し処理
• for
• while
• do~while
• foreach
<繰り返し処理>
条件
処理
条件により処理を
繰り返して実行
forの構文
for (初期処理;条件式;後処理) {
繰り返したい処理
(条件式がtrueの時に実行)
}
forの動き
for ($i = 0; $i < 3; $i++) {
echo $i . '<br>';
}
① ②
③
④⑤
⑥
⑦⑧
⑨
⑩⑪
⑫
<実行結果>
1
2
3
・$i++ (現在の値に1を足す) - インクリメント
・$i-- (現在の値から1を引く) - デクリメント
whileの構文
while (条件式) {
繰り返したい処理
(条件式がtrueの時に実行)
}
予想数字を作る
• 1~37の乱数を7個作る
配列 関数
繰り返し
処理
このプログラムの問題点
• 同じ数字が2回以上出てくる可能性がある
• 予想数字がソートされていない
• 新しいLotoが増えると無理がある
• Loto8
• Loto16
• Loto48
配列
• 普通の変数にはデータが1つ
• 配列には複数のデータを保持できる
• キーで複数のデータを区別する
$score
キー 要素
0 75
1 80
2 34
$score = array(75, 80, 34);
echo $score[0]; → 75
ロト7の数字予想の考え方(その1)
• 1~37の乱数を作り配列に追加
• 乱数を作った時に、既に配列に存在するかどうか調
べる
• 配列に乱数が存在しない時だけ追加
• 配列に乱数が7個になるまで繰り返し
ロト7の数字予想の考え方(その2)
• 1~37の乱数を配列に入れる
• 配列をシャッフルする
• シャッフルした配列の先頭から7個を取り出す
• 取り出した7個をソートする
配列に関する関数
• array range($start, $end)
• $startから$endまでの整数が入った配列を作成
• bool shuffle($array)
• $arrayをシャッフルする
• array array_slice($array, $offset, $length)
• $arrayの$offset番目から$length個の中身を切り取る
• bool sort($array)
• $arrayをソートする
配列の中身を確認する
• print_r($expression)
• $expressionに関する情報をわかりやすく表示する
• var_dump($expression)
• $expressionに関する情報をダンプする
• 型情報などより詳細な情報を表示
foreachの構文
◆ 配列の要素が無くなるまで繰り返す
foreach (配列 as 変数) {
配列の要素を処理
}
まとめ
• プログラムの考え方・
動作を理解
• 他のプログラムを改造
する・真似る
• とりあえず動くこと優先
• 最初は簡単なものを
自分で作ってみる
おわりに
ご清聴
ありがとうございました!

超初心者向け!Php勉強法とプログラミングの基礎の基礎