PHP
基本事項
コマンドラインで php ファイルを実行
php test.php
デバッグ用出力
print_r(); // 簡易
var_dump(); // 詳細
Basic Syntax
<?php
ではじめて、?>
で終わる。終わりのタグは、可能であれば省略する。- 命令文の最後には
;
が必ず必要。ただし終了タグの直前においては省略も可能。
// echoのショートハンド
<?php echo 'hello world' ?>.
<?= 'hello world' ?>
// comment1
# comment2
/*
* comment3
*/
Types
概要
- scalar(数学) types
- boolean
- integer
- float(=double)
- string
- compound types
- array
- object
- callable
- iterable
- special types
- resources
- NULL
- pseudo types
- mixed
- number
- callback
- array|object
- void
Type の確認方法
var_dump(123)
タイプと値をコンソール出力するgettype(123)
タイプを文字列として取得する(デバッグ用)is_type(123)
その型かどうかを判定したいときにつかう
var_dump(123); // => int(123)
echo gettype(1); // => integer
if (is_int(1)) {};
if (is_string('a')) {};
boolean
真偽値。case-insensitive である。
if ($action == "show_version") {}
$is_valid = true;
if ($is_valid) {}
echo
boolean を echo (文字列に Cast)すると、true は 1 を出力し、false は何も出力しない。
キャスト
キャストしたいときは(bool)
を使う。他のタイプでも同じだが、殆どの場合で自動キャストされるので、使うことはほぼない。
var_dump((bool) '1');
FALSE として判定されるもの
- FALSE
- 0(integer)
- 0.0(float)
- 空文字列及び"0"(string)
- 長さのない array
- NULL
TRUE として判定されるもの
- 上記以外のすべて(resource と NAN を含む)
Integer
整数。
$a = 1234; // 10進数 正の整数
$a = -123; // 10進数 負の整数
$a = 0123; // 8進数
$a = 0x1A; // 16進数
$a = 0b11111111; // 2進数
float への変換
計算結果が integer の範囲を超える場合は自動的に float が返される。
$large_number = 2147483647;
var_dump($large_number); // int(2147483647)
$large_number = 2147483648;
var_dump($large_number); // float(2147483648)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number); // float(50000000000)
計算結果が小数になる場合も float が返される。なお、round()
は四捨五入、(int)
は 0 に近い方に切り 捨てる。
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
int への cast
-
boolean
- true は 1
- false は 0
-
float
- 0 に近い方にまるめられる
-
string
echo (int) "10.5"; // 10
echo (int) "-1.3e3"; // -1300
echo (int) "bob-1.3e3"; // 0
echo (int) "bob3"; // 0
echo (int) "10 Small Pigs"; // 10
echo (int) "10.2 Little Piggies"; // 10
echo (int) "10.0 pigs "; // 10
echo (int) "10.0 pigs "; // 10
Float
float = double = real numbers
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
float へのキャスト
-
string
echo (float) "10.5"; // 10.5
echo (float) "-1.3e3"; // -1300
echo (float) "bob-1.3e3"; // 0
echo (float) "bob3"; // 0
echo (float) "10 Small Pigs"; // 10
echo (float) "10.2 Little Piggies"; // 10.2
echo (float) "10.0 pigs "; // 10(float)
echo (float) "10.0 pigs "; // 10(float)
String
文字列には4種類の記法がある。
- single quoted
- double quoted
- heredoc syntax
- nowdoc syntax
single quoted
- 複数行に渡って書ける
'
を出力する時のみエスケープが必要- 制御文字は使えない
- 変数は展開されない
- 基本的にそのまま文字列として出力される
// 複数行書ける
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
// 'を出力するには\でエスケープ
echo 'Arnold once said: "I\'ll be back"';
// 下記はただの文字列として出力される
echo '$some_val with \r newline';
double quoted
- 複数行に渡って書ける
\
を使って制御文字を出力できる- 変数は展開される
echo "$some_val with \r newline
and multiline
is ok";
Nowdoc
- single quote の別の書き方。
- 中身は評価されない
'EOT'
の部分をシングルクオートで囲むこと。名前は任意に書き換えて OK。
echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
EOT;
Heredoc
- double quote の別の書き方。
- 中身が評価される
EOT
の部分をダブルクオートで囲むか、もしくは囲まないこと。名前は任意に書き換えて OK。
$a = 'John';
$str = <<<EOT
my name is $a \r Doe
EOT;
変数のパース - simple syntax
double quoted 等の中において変数をパースする方法は、simple と complex の 2 種類がある。simple-syntax では、$
を使う。変数名の区切りをはっきりさせる必要があるときは変数名を{}
で囲む。
echo "my name is $myname. nice to meet you";
echo "my name is ${myname}. nice to meet you";
echo "$people->john drank some $juices[0] juice.".PHP_EOL;