HighOctaneFuel


変数の取り扱いについてみていきます。
変数は、値を入れるボックスだとイメージしてください。
このボックスの中に、数字や文字列を入れることによって、ブログラムの可読性をより容易なものに変えていきます。
例えば、何も書いていない白い紙に"38"と書いてあっても、何を意味しているのかよくわかりませんよね。
でも、"age"と書いてあれば、「あ~そうなんだ。年齢を意味しているんだな。」ということがすぐに分かります。
こういう風に、変数は後述する関数(機能)と共同して、プログラムを構成する重要な部品となっています。



sample2.php

PHPでの変数の記述です。
プログラムの内容ですが、変数$ageに0を代入し、echoで$ageの内容を出力します。今度は、変数$ageに38を代入し、echoで$ageの内容を出力します。

PHPでは、変数の名前を表わす文字や記号の前に"$"をつける約束になっています。
そうですね。プログラム中に"$"マークが出てきたら、それは、変数を意味する記号だと思ってほぼ間違いはありません。
ここで、「ほぼ」と言っているのは、例外もありますということです。ですが、PHPにおいてはほとんどの場合は変数を表わします。
一方、他の言語では、この"$"マークをつけない変数を扱うものもありますので、混乱しないように注意してください。
変数を記述したつもりが、"$"マークをつけ忘れ、エラーが表示されること等よくあることです。

プログラムを記述した行の最後に" ; "(セミコロン)がついているのに気がつかれたでしょうか?
PHPでは、行末にセミコロンを記述することで、その行の終端を表わすような約束になっています。

また、変数の名前をつけるにあたって、約束事があります。
変数名はアルファベットかアンダースコア"_"から始まらなければならないという約束です。
以下は、使えるものの例です。
$name
$_name
$name0

予め変数名として予約されているものがあり、ユーザが独自に定義して使うことのできない変数があります。
以下は、予約されているものの例です。
$this
$_POST
$_GET
$_SESSION

変数の考え方はお分かりになったでしょうか?
そうですね。数や文字を格納するためのボックスです。
そのように理解していただくと、忘れにくいかと思います。


変数の話はひとまず置いておいて、その変数に格納する、数や文字の話をしましょう。
コンピュータはデジタルを扱う機械。0と1の世界ですべてが処理されます。
しかしながら、私たち人間にとっては、この0と1の並び順が、どういう意味を持っていて、何を表わしているかなど、分かりようもありません。
そこで、コンピュータは、数や文字を表わすために、予め0と1の並び順を使って数字の7とか、アルファベットのYだとかを取り決めたのです。
例えば、数字の7であれば「00000001」、アルファベットのYであれば「00000010」のように値を割り当てていったのです。これは例なので、実際の並び方とは違います。
人間の言葉を、コンピュータにも分かるように表現するためにコードを割り振ったのですね。これを「文字コード」と呼んで、WindowsやMacintosh、そして、UnixなどのOSによってちがった文字コードで処理をするのが現実です。
半角の数字や、アルファベット、そして"# $ % & * +"等の記号は1バイトで表現できますが、日本語や中国語、その他の多くの国の言語を表現するには1バイトでは足りずに、2バイトで表現するようになってしまいます。
それが、機種や地域によって違った文字コードを持って処理する所以でもあったりします。
近年世界的にインターネットが普及するようになり、文字通り、ワールドワイドなウェブの世界を楽しむことができるようになりました。
そういう時代の背景から、どんな国のどんな機械でも扱うことのできるような、統一されたマルチバイト(2バイト以上)の文字コードを普及が進みました。
私達がこれから学習していくPHPという言語は、元来、欧米のシングルバイト文字しかサポートしておらず、日本語等のマルチバイトの文字を扱うことには不慣れでした。
PHPのバージョンが5になったときに"mbstring"というライブラリが導入され、まさに世界的に統一のとれた文字コードをサポートできるようになったのです。
これから、私達はこの数字と文字、記号を使ってWEBサイトを作っていくわけです。


整数
下記は、整数を変数に代入するコードです。
マイナスの数、8進数、16進数で記述することもできます。


sample3.php



浮動小数点数
下記は、浮動小数点数を変数に代入するコードです。
精度は、通常はおよそ 10 進数で 14 桁の精度があると言われます。


sample3.php



文字列
下記は、文字列を変数に代入するコードです。
文字列は、引用符(')、二重引用符(")、ヒアドキュメント、nowdocの4つの方法で扱えます。


sample3.php
引用符(シングルクォーテーション)で括った文字列を出力すると、その中に含まれる変数や¥(バックスラッシュ)で始まる特殊文字は展開されずに出力されます。
例示を示すと分かりやすいと思いますので、以下にコードと出力内容を示します。
出力 : HelloWorld
	
	$num = 100;
	echo = 'Hello $num World';
	//-->出力 : Hello $num World : <--$numの値が展開されない

	echo = 'Hello$tWorld';
	//-->出力 : Hello$tWorld : <--\tが展開されない
?>


sample3.php
二重引用符(ダブルクォーテーション)で括った文字列を出力すると、その中に含まれる変数や¥(バックスラッシュ)で始まる特殊文字は展開されて出力されます。
出力 : HelloWorld
	
	$num = 100;
	echo = "Hello $num World";
	//-->出力 : Hello 100 World : <--$numの値が展開される

	echo = "Hello$tWord";
	//-->出力 : Hello World : <--\tが展開される
?>


sample3.php
ヒアドキュメントと呼ばれる方法を用いることによって、改行や変数の展開等を含んだ文字列の容易な扱いが可能になります。
ヒアドキュメントは、"<<<(任意の文字列)"から"(任意の文字列)"の間に記述された文字列を、ダブルクォーテーションで括った文字列と同様の扱いをします。
ダブルクォーテーションで括った文字列との違いは文章整形をそのままコピーして出力できる点にあります。 文章の体裁を整えるためにダブルクォーテーションでは、"¥n"や、"¥t"などの特殊文字(後述)を用いて整形しなければなりませんが、
ヒアドキュメントでは、"<<<(任意の文字列)"から"(任意の文字列)"までの整形を崩さずに、そのまま利用できるのです。



sample3.php
ヒアドキュメントが、ダブルクォーテーションで括ったような展開処理をするのに対して、
Nowdocは、シングルクォーテーションで括ったような展開をしない動作をするのが特徴です。
"<<<'(任意の文字列)'"から"(任意の文字列)"で括ります。



さて、話を変数に戻します。
変数には、プログラム中に作用する有効な範囲というものがあります。
例えば、会社や学校の友達の間で通用する自分のニックネームがあったとします。
これは、その仲間の中だけで呼び合う名前であって、一歩その輪の中から外れてしまうと、「何、それって」という話になってしまうでしょう。
反対に、社会的に通用する自分の本名は、実社会の中でも通用するし、友達の間でも当然分かりあえる名前です。
プログラミング言語の変数の扱いについても、同じ考え方が導入されています。これを一般的に"変数のスコープ"と呼んでいます。

次のコードを見てください。
下記のコードでは、$aはグローバル変数です。それに相対して、$bは"{}(ブロック)"で囲まれたローカル変数です。
それぞれ、echoを通じて、出力されるわけですが、ローカル変数(友達の間のニックネーム)はグローバル変数のスコープでは通用しません。
したがって、echo $aは「hoge」と出力されますが、echo $bは出力がされません。


sample3.php



スーパーグローバル変数とは、ソースファイルの垣根を越えて、PHP言語全体に及ぶスコープの変数のことです。
それぞれ使用目的が異なるため、関連した事柄を説明する際に出てくるものですが、
ここでは、以下のように分類され、このようなものがあるんだということを覚えておいてください。
といっても、イメージがわかないでしょうから、例示として、サーバの属性を保持するスーパーグローバル変数を出力してみます。
$_SERVERサーバの属性値
$_POSTPOST送信されたデータ
$_GETGET送信されたデータ
$_COOKIECookie
$_FILESアップロードされたファイル
$_ENV環境変数
$_REQUESTユーザから送信されたデータ
$_SESSIONセッションデータ


sample3.php

最後に特殊文字をまとめます。
改行¥n
復帰¥r
水平タブ¥t
水直タブ¥v
バックスラッシュ¥¥
ドル記号¥$
二重引用符¥"
 
PHP  |  JavaScript  |  ASP.NET  |  konekobiyori.net  |  MaterialShangri-La  |  blog  |