どうも、WEBおじさんです。
初めてですね、続き物を書くのはw
ちょっと緊張しますw
ということで、前回の記事は「変数」について定義の仕方と使い方の基礎を説明しました。
ちょっと記事が長くなっちゃったんですけど、読んでいただいた方が理解できたのかが心配ですw
では、今回は引き続き「定数」について定義の仕方と使い方を説明します。
が、前の記事でもお話した通り「定数」というものの存在をちゃんと認識したのが3年ほど前でして、実は「定数」についてはまだあまり詳しくありません。
なので、「定数」についてはPHPのみの解説とさせていただきます。
まず、定義の仕方についてはこちら。
< 定数の定義 >(PHP)
define(‘A’,’100′);
あ、ちょっと書き方がシンプルすぎて「は?」とか思っちゃったりしてませんか?
ボクがこれを知ったときは思いましたw
なので、避けましたwww
これを分解して開設すると、「define」というものは「関数」というものでして、関数というのはまた別の機会にちゃんと説明しますが、簡単に言うと「すでに組まれているよく使うであろうプログラム」です。
「define」というのは、定数を定義するための関数です。
これを使うことで定数が一つ定義されます。
で、定義の書き方が前回の変数とは少し違いますね。
これは関数の使い方がこういうルールなのです。
関数名(引数,引数);
みたいな書き方が関数を使う際のルールです。
逆に、こういう書き方をされているものを見つけたらそれは関数ということになります。
カッコの中は「引数(ひきすう)」というものになり、使う関数によって入れるものや数が異なります。
あー、テキストっぽいーwwwいやだーwww
で、「define」の書き方は上のように、2つの引数が必須になります。
一つ目の引数(第一引数)には「定数名」、二つ目の引数(第二引数)には「値」を入れます。
これで定義は終わりです。
では使い方は、というと、
print A;
という感じで使います。
「print」は出力関数なのですが、これを使うことでHTMLページに値を出力することができたりします。上の場合は「100」が出力されます。
もちろん、変数と同じように使うこともできます。
$a = 50;
$b = A;
$c = $a + $b;
上のような書き方の場合、$cには「150」が定義されます。
という感じで、定数の基礎は以上となります。
「変数と定数って何が違うの?定義の仕方だけ?」
みたいに思った方、いらっしゃいませんか?
そうなんです。ボクも最初そう思いました。
でも、いろいろと用途が変わってきたり、それぞれが持ってる特性があったりするので、使い方や使う場所などもいろいろと変わったりします。
ここからの話は少しPHPが使える方向けの話になるのでご容赦ください。
今回説明した「define」で定義した定数はプログラムのどこの場所でも使用することができる「グローバル定数」というものになります。
それに対し、変数というものはどこの場所でも使えるものではありません。
どういうことかというと、定義したページ内でしか使えないのはどちらも同じなのですが、変数の値に関しては自身で定義する関数内には引数として持って行かないと使うことができません。
しかし、グローバル定数の場合は引数に入れなくてもそのまま使用することができます。
なので、サイト内のどこでも使用する可能性があり、且つ使用頻度が高いものに関しては定数で定義し、全ページへ共通読み込みさせるファイルとして外部ファイル化しておき、requireなどでページファイルの頭に読み込ませておけば全ページでその定数を使うことができます。
例えば、ECサイトのような物販がある場合、消費税などの計算をしたりしますよね?
でも税率って変わる可能性がありますよね?
もし税率が各ページ内で直書きされて計算されている場合、税率が変わるたびに該当のファイル全てを書き換えないといけないですが、上記のような定義の仕方をしておけば一つのファイルを書き換えるだけで全部の税率が変更されるので便利ですよね。
でも、変数でも同じような使い方ができますよね?
しかし、もし自身で定義された関数内で税率計算がされていた場合、そこには直接持っていくことができないため、引数を設定しなければいけなかったりします。
その点、defineで定義されたグローバル定数の場合は関数内でも関係なく使用できるので、定数の方が使い勝手が良いですね。
まぁ、ざっくりと言えばこんな感じです。
これ以外にもいろんなところで恐らくメリットやデメリットなどがあると思います。
なので、値をセットする場合、非常に使用頻度が高いもので全ページに関係するものであれば「define」で定数定義し、そうでもないものに関しては各ページ内で変数定義して使用するといいと思います。
一つ小話として、defineでセットする値(第二引数)には関数を使うことも可能です。それもdefineを使うメリットになります。
また、変数、定数どちらもその名前は自身で好きな文字列を使って定義するのですが、同じ変数名や定数名が先に定義されていた場合、それぞれで挙動が異なります。
まず、変数の場合は後に定義されたものが有効となり、値は後に定義されたもので上書きされます。それによるエラーは特にありません。
次に、定数の場合は二重定義があるとエラーとなります。
定数の値に関しては先に定義されたものが有効となります。
これらも頭の片隅にでも置いておくといいかもしれないですね。
ちょっと今回は2記事にわたってちょっと説明がクドくなってしまいました。
次からはもっとわかりやすくて便利なものについて説明できるよう心がけます。
今後ともよろしくお願いします!