間が空いてしまいましたが,PHP学習の第2弾です。
今回はPHPで変数と変数の定義方法とを記録していこうと思います。
今回も環境はUbuntu上のApacheです。
また,参考はPHPの公式ドキュメントです。
前回の記事もぜひご覧ください↓

型について
そもそもPHPは動的型付け言語ですが,型宣言を行うこともできるようです。
確かに,Helloworldのときも””で囲ったので,型の付き方はJavascriptやPythonと同じと考えて良さそうです。
とりあえず最初は型宣言はなしで,あとで宣言ありの書き方を学んでいこうと思います。
変数の宣言
宣言方法
「test」という名前の変数に「5」という値を与えてる方法がこちらです。
$test = 5;
echoで呼び出すときは以下のように呼び出します。
echo $test;
実行できたのが確認できると思います。

ここでちょっと気づいたのですが,echoの中に指定する変数を””で囲っても実行されてしまいます。

では,この変数内の値を文字列として解釈させるにはどうすればいいのかというと,”で囲ってやる必要があるようです。
確かめてみると,たしかに$testが文字列として扱われているようです。


変数名の制約
変数名には制限があります。
例として,
- _で始まる変数名
- 数字で始まる変数名
- äのような特殊文字を含む変数名
- $this
が使えないようです。
試しに数字で始まる変数名を実行してみたら,なにも表示されませんでした。

数字はもしかしたら使ってしまうかもしれないので,気をつけます。

複数の変数を呼び出す
複数の変数をechoで呼び出すときは,「,」で区切る必要があります。
$testと$test2を呼び出すときは,
echo $test, $test2;
としてやる必要があります。
echoの中に変数と直接文字列を書く際は,文字列はいつもどおり””で囲み,変数はそのまま,あとはこれらを「,」で区切ってやれば出力できます。
echo "value: ", $test, ", massage: ", $test2;

ちなみに,””で囲んでも中身の変数は実行されるので,全体を””で囲み,その中身で変数を呼び出しても同じ結果が実行されます。
echo "value: $test, massage: $test2";

こっちのほうが楽そうですね。
ここでまた気づいたことがあるのですが,””で囲ってやれば変数の結合のときに「,」で区切る必要もないようです。
echo "$test $test2";


変数内で変数を呼び出す
変数内で変数を呼び出す場合,つまり他の変数を参照する場合,$の前に&をつける必要があります。
例えば$testValueに$test内の値をそのまま与えたい場合,
$testValue = &$test;
としてやる必要があります。
ちなみに,&なしでもこのコードなら全く問題なく実行できます。
では何が違うのかというと,&を使うのは参照であるため,&ありだと元の$testの値が変更されたときに$testValueも変更されるのに対し,&なしだと$testValueの値を定義した時点の&testの値がコピーされるだけで,$testの値が後で変更されても$testValueの値は変更されない,という点が異なっているようです。
複数の値を参照する方法としては,関数を使ったり配列として定義したりする方法があるようです。

再宣言
変数なので,当然再宣言できます。

当然ですが,echoのタイミングによって上書きされたタイミングがわかりますね。
定数の宣言
定数の宣言は,JavaScriptと同様にconstを利用してできますが,スカラー式と呼ばれる,bool型/int型/float型/string型しか定義できないようです。
また,定数なので当然再宣言ができません。
他に変数との違いといえば,&が必要ありません。
つまり,constを使う場合は
const test = 'massage';
これでいけます。

ではスカラー式以外を定義したい場合はどうするのかというと,define()関数を利用するようです。
第1引数に定数名,第2引数に値を与えます。
定数名が「massage」,値が「Hello!」の定数はこんな感じで宣言できます。
define('massage', "Hello!");

値には配列を与えることもできるようです。

型宣言
調べてみましたが,型宣言はクラスとやらが出てこないと指定できないようです。
関数の返り値や引数に型を指定する方法もあるようですが,今回は変数・定数しか取り扱わないので飛ばします。
型チェックはできるようなので,できるということだけ覚えておけばいつか役に立つでしょう。

感想
今回は,PHPで変数・定数の宣言について学びました。
自分はまだどんなサイトを作ろうかとかは考えていませんが,constを使えばJSと同じ感覚で定数宣言が使えそうで安心しました。
自分はJSをちょっと触ったくらいの人間なので,クラスに関しては聞いたことがある程度なのですが,PHPではクラスも取り扱っているようなので,いつかそこまで到達してみたいですね。
次回はif文・else文や関数宣言あたりをやると思います。

コメント