Ruby を少し齧った人間が PHP に触れてみたので後で見返すように書きました。
php タグ
PHP のコードは<?php
と ?>
の中に書く
<?php
$name = "伊藤";
print($name);
?>
HTMLに埋め込むのではなく、独立したファイルに PHP のコードを保存する場合は末尾の ?>
は省略することができる。終端の ?>
の後に改行文字などがあると予期せぬ不具合の元になる為、省略することを推奨されている。
<?php
$name = "伊藤";
print($name);
文の区切り文字
文の末尾には;
が必要
$name = "神山"
// ; が抜けているのでダメ
文字列の連結
"Hello " . "world";
// "Hello world"
変数の宣言
// 変数は先頭に`$`が必要
$message = "hello";
出力
Rubyの puts などのように引数の文字列を出力する
var_dump($message);
// var_dump は型などが表示されるのでデバッグ用に使う
echo "hello";
print "world";
入力
// Ruby の gets のように標準入力から文字列を受け取る
print("入力してください");
$input = fgets(STDIN);
print($input);
// Ruby の gets 同様に改行文字が含まれる。 trim 関数を使って前後の空白文字を除去する
print("入力してください");
$input = trim(fgets(STDIN));
print($input);
PHPのbool値
PHPマニュアルよりの引用です。
boolean に変換する場合、次の値は FALSE とみなされます。
boolean の FALSE
integer の 0 および -0 (ゼロ)
float の 0.0 および -0.0 (ゼロ)
空の文字列、 および文字列の "0"
要素の数がゼロである 配列
特別な値 NULL (値がセットされていない変数を含む)
空のタグから作成された SimpleXML オブジェクト
上記以外は TRUE と見なされます。
条件分岐
if 文は条件式の()を省略できない。また PHP の条件分岐は if 文なので、Ruby のように代入文の右側に置くとエラーになる
if ($age >= 20) {
print("成人です");
}else {
print("未成年です");
}
//HTMLに埋め込む
<?php if($age >= 20): ?>
<div>成人です</div>
<?php else: ?>
<div>未成年です</div>
<?php endif; ?>
配列
//宣言
$week1 = ["月", "火", "水"];
$week2 = ["木", "金", "土"];
// 要素の型は揃っていなくても良い
$any_type = ["なんでもいいよ", 100, 1.14, true];
//末尾の要素を取り出す
$wday1 = array_pop($week1);
//"水"
//先頭の要素を取り出す
$wday2 = array_shift($week2);
//"木"
//配列の末尾に要素を追加する
array_push($week1, $wday1);
//["月", "火", "水"]
array_push($week1, $wday2);
//["月", "火", "水", "木"]
//複数の配列をつなぎ合わせる
$week = array_merge($week1, $week2);
// ["月", "火", "水", "木", "金", "土"]
//配列の要素を逆順にした配列を返す
array_reverse($week);
// ["土", "金", "木", "水", "火", "月"]
range関数
// range(開始値, 終了値)
range(0, 5)
// [0, 1, 2, 3, 4, 5] の配列を返す
// Ruby の 1..5 のようなもの?
foreach 文
配列から要素を先頭から一つづつ取り出し、ブロック内の処理を適用する。Ruby の foreach メソッドとほぼ同じ。
$week = ["月", "火", "水", "木", "金", "土"];
foreach ($week as $day) {
print("今日は" . $day . "曜日\n");
}
while 文
条件式の(
)
は省略不可
$money = 30000;
while($money >= 0) {
print("あと" . $money . "円\n");
$money -= 3300;
}
for 文
for($money = 30000; $money >= 0; $money -= 3300){
print("あと" . $money . "円\n");
}
関数の定義
function 関数名(引数) {
関数の処理本体
return 返り値
}
//関数定義
function addNum ($x, $y) {
return($x + $y);
}
//関数呼び出し
print(addNum(2,4));
//6
ヒアドキュメント
変数 <<< EOM
複数行の
文章を
書く
EOM;
function createMessage($name, $price) {
$msg = <<< EOM
{$name}様、ご注文を承りました。
ご注文の代金は合計、{$price}円です。\n
EOM;
echo $msg;
}
createMessage("伊藤", 300000);
createMessage("高崎", 3000);
//string(89) "伊藤様、ご注文を承りました。
//ご注文の代金は合計300000円です。"
//string(87) "高崎様、ご注文を承りました。
//ご注文の代金は合計3000円です。"
連想配列
Ruby の hash のようにキーと値の組でデータを保持する
連想配列の宣言 {``}
ではなく [``]
で括ることに注意
$member = ["name" => "伊藤", "nickname" => "テストマスター"];
$member["name"];
// ”伊藤”
$member["point"];
// 80
//入れ子にもできる
$members = [
["name" => "伊藤", "nickname" => "テストマスター"],
["name" => "高崎", "nickname" => "スクラムマスター"]
];
$members[1]["name"];
// "高崎"
外部ファイルを読み込む
// 読み込まれる側の記述は今まで通り
//sampleFunc.php
function createMessage($name, $price) {
$msg = <<< EOM
{$name}様、ご注文を承りました。
ご注文の代金は合計{$price}円です。\n
EOM;
echo $msg;
}
function getPrice($cnt) {
return 500 * $cnt;
}
// 読み込む側は宣言が必要
require_once __DIR__ ."/sampleFunc.php";
$orders = [
["name" => "伊藤", "cnt" => 300000],
["name" => "高崎", "cnt" => 300],
["name" => "神山", "cnt" => 200],
["name" => "服部", "cnt" =>180]
];
// 外部ファイル内の関数 getPrice(), createMessage() を呼び出している
foreach($orders as $order) {
$price = getPrice($order["cnt"]);
createMessage($order["name"], $price);
}
// 伊藤様、ご注文を承りました。
// ご注文の代金は合計150000000円です。
// 高崎様、ご注文を承りました。
// ご注文の代金は合計150000円です。
// 神山様、ご注文を承りました。
// ご注文の代金は合計100000円です。
// 服部様、ご注文を承りました。
// ご注文の代金は合計90000円です。