WordPressでブログを運営しているにも関わらず、phpに関しての理解がイマイチだと自分で思ったことと、開発スピードを上げるために今の自分の知識以上の情報がほしかったのでよく利用するドットインストールさんの動画で入門の内容をメモ書き。自分の為のメモ書きですが、php初心者さんには分かりやすい内容になっています。別ページで応用編も用意しています。
P.S ドットインストールさん、いつもありがとうございます。とっても勉強になっています!!
目次
変数
値(データ)に付けるラベル
※変更可能
値(データ)で扱えるデータ型
文字列 (“” ”): $messagge = “Hello World!”
数値 (整数、少数): $x = 5; $y = 1.22;
論理値 ( true / false): $flag = true;
null (何もない): $n = null;
配列
オブジェクト
※結果だけでなく型まで表示させたい場合は「var_dump(変数名)」を使う。主にテストで使われる。
ルール
1. $から始まる。
2. 英数字_が使える
3. $のあとは数字はダメ
4. 大文字小文字は区別される ※「apple」と「APPLE」は異なる変数
記入例
$messagge = “Hello World!”
echo $message;
実行結果: Hello World!
定数
値(データ)に付けるラベル
※変更不可能
記入例
define(“ADMIN_EMAIL”, “user$gmail.com”);
define(“LIST_COUNT”, 15);
echo ADMIN_EMAIL;
実行結果: user$gmail.com
演算子
代入演算子
数値に関するもの + – * / %
※%は余り
連結演算子
. 「.」を付けると文字列が連結できる
echo “hello” . “world”;
単項演算子
++ —
$x++; // $x = $x +1;
++$x;
代入を伴う演算子
$x += 5; // $x = $x + 5;
$x *= 5; // $x = $x * 5;
文字列の表現
” 変数とエスケープ文字を展開する
‘ 展開しない
$name = “user_name”;
echo “hello $name”; // ダブルクォーテーション
実行結果: ‘hello user_name
$name = “user_name”;
echo ‘hello $name’; // シングルクォーテーション
実行結果: ‘hello $name
¥n // 改行
¥t // タブ
¥¥ // ¥
if文(条件分岐)
シンプルなif文
以下の2つは全く同じ処理
パターン1:
$age = 23;
if ($age > 20) {
echo “大人!;
} elseif ($age > 12) {
echo “子供!”;
} else {
echo “幼児!”;
}
パターン1:
if ():
else:
endif:
代入演算子
以下の2つは全く同じ処理
$age = 10;
パターン1:
if ($age > 10) {
$message = “大人!”;
} else {
$message = “子供!”;
}
パターン2:
$message = ($age > 20) ? “大人!” : “子供!”;
echo $message;
switch文(条件分岐)
$signal = “red”;
switch ($signal) {
case “red”:
echo “止まれ”;
break;
case “blue”:
case “green”:
echo “進め!”;
break;
case “yellow”:
echo “注意!”;
break;
default:
// 例外処理
break;
}
while文(ループ文)
まえ判定のwhile文
$i = 0;
while ($i < 10) {
echo $i ;
$i++;
}
※条件によってはを条件判定が通らない。
あと判定のdo while文
$1 = 0;
do {
echo $i;
$i++;
} while ($i < 10);
※必ず1回は条件判定を通る。
for文(ループ文)
for ($i = 0; $i < 10; $i++) {
echo $i;
}
break, continue文
break: ループを抜ける
continue: ループをスキップする
for ($i = 0; i < 10; $i++) {
if ($i % 2 == 0) { // 偶数の場合
continue; //処理をスキップ
}
echo $i; //奇数の場合$i
}
配列
データ型で、グループ化できる
$youbi = array(“Sun”, “Mon”, “Tue”);
echo $youbi[0]; //[0]は添え字と呼ばれ、0から始まる。この場合はSun
$youbi[] = “wed”; // $youbiの最後に追加される
$youbi[0] = “Sunday”; // 修正する
unset($youbi[2]); // 削除。この場合はTueが削除される
連想配列
添え字を分かりやすくする。(ラベルを付ける)
$sales = array(“tanaka” => 150, “suzuki” => 200);
echo $sales[“tanaka”]
実行結果: 150
配列に関するループ(foreach文)
配列の場合
$youbi = array(“Sun”, “Mon”, “Tue”);
foreach ($youbi as $y) {
echo $y;
}
連想配列の場合
$sales = array(“tanaka” => 150, “suzuki” => 200);
foreach ($sales as $name => $amount) {
echo $name, $amount;
}
関数
複数の処理をまとめることができる。
シンプルな配列の場合
function sayHi() { //sayHi()が関数。※関数には必ず()が付く
echo “Hi!”;
}
sayHi(); // 関数の呼び出し。()があると関数と認識される
引数
関数にオプションと初期値を与えることができる
<?php
function sayHi($name = “suzuki”) { // $nameが引数、”suzuki”が初期値
echo “Hi! $name”;
}
sayHi(“tanaka”);
実行結果: Hi! tanaka
※引数がない場合には初期値を使い、引数がある場合には引数を使う。
戻り値(文字列を返す)
function sayHi($name = “suzuki”) {
return “Hi! $name”; // returnが戻り値
}
echo sayHi();
実行結果: Hi! suzuki
変数のスコープ
関数内で定義された変数は指定された関数内でしか有効ではない
$myname = “ruby”;
function sayHi($name = “tanaka”) {
$myname = “php”; // ローカル変数
return “hi! $name from $myname”;
}
echo sayHi();
実行結果: Hi! tanaka from php
※echo $mynameをするとエラーになる
phpであらかじめ用意されている関数
PHPの関数マニュアル↓↓
http://php.net/manual/ja/funcref.php
数学関数
=====
ceil: 端数の切り上げ
floor: 端数の切り捨て
round: 四捨五入
pi: 円周率
rand: ランダム数値
=====
$x = 5.2;
echo ceil($x); // 6
echo floor($x); // 5
echo round($x); // 5
echo pi(); // 3.1415926534
echo mt_rand(1,100); // 1から100までに数値をランダムに表示
文字列関数
=====
strlen: 文字列の長さを返す
strpos: 指定した文字が何文字目にあるかを返す
substr: 部分文字列を返す
str_replace: 置換して返す
=====
$s = abcdefg;
echo strlen($s) // 7
echo strpos($s, “c”) // 2、添え字は0から始まっているため
echo substr($s, 2) // cdefgh
echo substr($s, 2, 2) // cd
echo substr($s, -2, 2) // fg
echo replace(“abc”, “ABC”, $s); // ABCdefg
日本語に対応させる場合は関数の前に「mb_」を付ける。
※あらかじめ用意されている関数を使うこと
$s = “あいうえお”;
echo srtlen($s); // 15 ※正しいデータではない
echo mb_srtlen($s); // 5 ※mbはMulti Byteの略
echo mb_strpos($s, “う”) // 2
echo mb_substr($s, -2, 2) // えお
書式を指定して文字列を指定(printf, sprintf)
文字列を指定する場合は「printf」を使う
$s = “banana”;
$n = 40;
$p = 5.23;
printf(“we have %d %s for %f” , $n, $s, $p);
%d: 整数値
%s: 文字列
%f: 実数値
実行結果: we have 40 banana for 5.230000
他にもオプションが使える
printf(“we have %05d %ss for $%.2f” , $n, $s, $p);
実行結果: we have 00040 bananas for $5.23
※%ssで$s + “s”、$%.2fで”$” + $pの2桁まで
そのほかにも「sprintf」が使える
$s = “banana”;
$n = 40;
$p = 5.23;
$result = sprintf(“we have %d %s for %f” , $n, $s, $p);
echo $result;
実行結果: we have 40 banana for 5.230000
配列関数
=====
count: 要素の数を返す
sort: 要素をソートして返す
in_array: 配列の中にある要素を調べる
implode / explode: 配列の中身を何からの文字列で区切る
=====
$members = array(“tanaka”, “sasake”, “kimura”, “yoshida”, “uchida”);
echo count($members); // 5
echo sort($members); var_dump($members); // 1array(5) { [0]=> string(6) “kimura” [1]=> string(6) “sasake” [2]=> string(6) “tanaka” [3]=> string(6) “uchida” [4]=> string(7) “yoshida” }
if (in_array(“tanaka”, $members)) {
echo “BINGO!”;
}
実行結果: BINGO
$members = array(“tanaka”, “sasake”, “kimura”, “yoshida”, “uchida”);
echo implode(“@”, $members);
実行結果: tanaka@sasake@kimura@yoshida@uchida
$members = array(“tanaka”, “sasake”, “kimura”, “yoshida”, “uchida”);
$atstr = implode(“@”, $members);
var_dump(explode(“@”, $atstr));
実行結果: array(5) { [0]=> string(6) “tanaka” [1]=> string(6) “sasake” [2]=> string(6) “kimura” [3]=> string(7) “yoshida” [4]=> string(6) “uchida” }
日付/時間関数
日付や時間を指定する場合は、Unixタイムスタンプ(1970/1/1 00:00:00からの経過秒数)が用いられることが多い。
Unixタイムスタンプで表示
var_dump(time()); // int(1428284990)
var_dump(mktime(7,55,0,4,6,2015)); // int(1428299700) ※2015/4/6 7:55:00の意味
var_dump(strtotime(“2015/4/6 7:55:00”)); // int(1428299700)
var_dump(strtotime(“last Sunday”)); // int(1428184800)
var_dump(strtotime(“+2 day”)); // int(1428458235)
特定日付のフォーマットで表示
echo date(“y-m-d H:i:s”); // 15-04-06 04:04:22
echo date(“y-m-d H:i:s”, strtotime(“last Sunday”)); // 15-04-05 00:00:00
詳しい関数
http://php.net/manual/ja/function.date.php
ファイルへのデータ書き込み
$testFile = “test.dat”; // 書き込みされるファイル
$contents = “こんにちは!”;
if (is_writable($testFile)) { // 「is_writable」で書き込み可能かどうかを調べる、返り値はtrue / false
// ファイルをオープンできたか
if (!$fp = fopen($testFile, “a”);) { // fopenでオープンして$fpに代入し、その値を判定(!)している
else “could not open!”;
exit;// プログラムを終了する
}
// 書き込めたか
if (fwrite($fp, $contents) === false) { // $testFileでオープンしたものに書き込めたかどうかを判定。
else “could not write!”; // うまく書き込みができなかった場合
exit;
}
echo “success!”; // うまく書き込みができた場合
// 終了処理
fcolse($fp);
} else {
echo “not writble!”;
exit;
}
※「===」は型まで厳密に判定してくれる
ファイルからのデータ読み込み
fopen、freadで処理をする場合
$testFile = “test.dat”; // このファイルに書かれている内容を読み込み
if (!$fp = fopen($testFile, “r”)) {
echo “could not open”; // “r”がうまくいかなった場合
exit;
}
#contents = fread($fp, filesize($testFile)); // うまくいった場合に$contents変数にデータを格納
var_dump($content);
fclose($fp);
実行結果: string(18) “こんにちは!”
file_get_contentsで処理をする場合
$testFile = “test.dat”; // このファイルに書かれている内容を読み込み
$contents = file_get_contents(“$testFile”); // 変数$testFileを読み込んで返す
$contents = file_get_contents(“http://grooving-earth.com”); // URLを指定してソースを読み込んで返す
$contents = file(testFile); // ファイルの中身を読み込み、1行ごとに配列にして返す
var_dump($contents);
ファイルからのデータ受け取り
get_info.php
<?php
$birthday = $_POST[‘birthday’];
$youbi = date(“l”, strtotime($birthday));
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″ />
<title>PHPの練習</title>
</head>
<body>
<h1>PHPの練習</h1>
<p><?php echo htmlspecialchars($youbi); ?></p> // htmlspecialcharsを使ってエスケープしている
</body>
</html>
sample.html
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″ />
<title>PHPの練習</title>
</head>
<body>
<h1>PHPの練習</h1>
<form action=”get_info.php” method=”post”>
<input type=”text” name=”birthday” value=””>
<input type=”submit” value=”送信”>
</form>
</body>
</html>
フォームへの入力: 1984-05-22
実行結果: Tuesday
※POSTからGETにする場合は、phpファイル側とhtmlファイル側両方を変更してあげれば良い
LEAVE A REPLY