仕事でVB.NETを利用しているのですが、PHPの変数が少し解り難かったのでPHPの変数について、理解しておきたいポイントをまとめました。
基本動作
PHP の変数はドル記号の後に変数名が続く形式で表されます。 変数名は大文字小文字を区別します。
$this は特別な変数であり、代入することはできない。
変数に変数を代入する場合、値渡しとなるので元の値は変更されない。
例)$aに$bを代入し、その後、$aに値を設定する。
<?php
$a="abc";
$b=123;
$a=$b;
$a=456;
echo $a."\n".$b;
?>
456
123
参照を渡す場合は、&を変数の前につける 例)「$a=&$b」
<?php
$a="abc";
$b=123;
$a=&$b;
$a=456;
echo $a."\n".$b;
?>
456
456
名前のある変数は参照渡しが出来るが、名前が無い式は参照渡しが出来ない。
変数が初期化されていない場合、型のデフォルト値が設定される。
定義済み変数
定義済変数は変更出来ない。
スーパーグローバル — すべてのスコープで使用できる組み込みの変数
- $GLOBALS — グローバルスコープで使用可能なすべての変数への参照
- $_SERVER — サーバー情報および実行時の環境情報
- $_GET — HTTP GET 変数
- $_POST — HTTP POST 変数
- $_FILES — HTTP ファイルアップロード変数
- $_REQUEST — HTTP リクエスト変数
- $_SESSION — セッション変数
- $_ENV — 環境変数
- $_COOKIE — HTTP クッキー
- $php_errormsg — 直近のエラーメッセージ
- $http_response_header — HTTP レスポンスヘッダ
- $argc — スクリプトに渡された引数の数
- $argv — スクリプトに渡された引数の配列
スコープ
グローバル変数を関数内で利用する場合は「global 」として宣言する必要がある。
globalのかわりに$GLOBALSを使用する事も出来ます。
可変変数
変数名を可変にする機能です、変数名を動的に作成する事ができるので、必要があれば利用する程度で通常のプログラムを作成する場合、可読性が減少するので積極的には使わない方が良いと思います。
<?php
class foo {
var $bar = 'I am bar.';
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->{$baz[1]} . "\n";
$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n";
$arr = 'arr';
echo $foo->{$arr[1]} . "\n";
?>
I am bar.
I am bar.
I am bar.
I am r.
1行目の表示は「fooクラスの$bar」を表示しています。
2行目の表示は$bazの2番目[bar]を取得して「fooクラスの$bar」を表示しています。
3行目の表示は$startの[b]と$endの[ar]を結合し[bar]の文字を作成し、「fooクラスの$bar」を表示しています。
4行目の表示は$arrの2文字目[r]を取得し、「fooクラスの$r」を表示しています。
まとめ
- 変数への代入は値渡しである。
- 変数への参照渡しは変数の前に&を付ける。
- 同一の変数でもスコープが変われば別の変数となる。
- 可変変数は利点があるが、プログラムの可読性が低下するので利用する時は考慮が必要。
コメント