PHPのソースコードの意味がわかる10選
PHPソースコードを読んで理解する際、C言語、Java言語、C#言語とは少し異なる記載方法があります。
ここでは、初めてPHPソースコードを読んで、疑問と感じやすい、
- @$xxの意味は何?、
- .=や.の意味は?、
- ::の意味は何?、
- =>の意味は?、
- &の意味は?、
- !や!!の意味は?、
- ??の意味は?、
- <=>ってどんな意味があるの?、
PHPエラー制御演算子、アロー演算子、演算子の意味やバリエーションがわかります。
Contents
PHPのソースコードの意味がわかる10選
$は変数を意味します
PHPで変数を表す記号は、$です。
1 2 3 4 5 6 7 |
<?php $変数 = 100; $文字列 = "変数"; $文字列2 = "文字列"; $配列 = array(); $配列2 = ["abc"] ; |
変数は数値、浮動小数、文字、文字列、配列、オブジェクトなど型を指定する必要はありません。
$$変数、$$$変数で変数をさかのぼることもできます。
1 2 3 4 5 6 7 8 9 |
<?php $変数 = 100; $文字列 = "変数"; $文字列2 = "文字列"; echo $文字列2 ; // 出力:文字列 echo $$文字列2 ; // 出力:変数 echo $$$文字列2; // 出力:100 |
$文字列2は、文字列です。その$文字列は、変数です。$変数は100です。
$文字列2の先頭に$を付け加えることで$文字列を参照することができます。
$複数個並んでいる場合は、動的に指し示す値が変化するため、さらにソースコードの可読性が落ちます。
php アットマーク(@) 意味
PHPでアットマーク(@)は、エラー制御演算子の扱いになります。
@つきの式で生成されたエラーの場合は返り値が0(NULL,false)になるように制御されます。
1 2 3 |
<?php echo $a; |
Notice: Undefined variable: a
- 初期化されていない変数
- 変数名のスペルミス
- 標準関数の使い方の間違い
- (他にもパターンはあります)
この警告出力を抑える方法の一つが、アットマーク(@)のエラー制御演算子を使う方法です。
1 2 3 4 |
<?php echo @$a; echo @file_get_contents('file not exists'); |
@をつけるとワーニングが出力されません。
上記ソースコードはどちらも整数の0を応答するため、何も出力されない結果になります。
もしあなたが、ソースコードを修正する立場なら、エラー制御演算子に頼らない方法を模索してください。
エラー制御演算子は、実行コストがかかります。
ループ内にあるエラー制御演算子をなくすだけでパフォーマンスが向上する可能性があります。
こちらのPHP公式:エラー制御演算子にも書いてあります。
php ドット(.)、ドット=(.=)の意味は文字の連結です
.=や.は文字列の連結操作です。
1 2 3 4 5 6 7 8 9 |
<?php $a = 'PHP 文字列'; $b = $a . "の連結"; echo $b; // 出力:PHP 文字列の連結 $a .= "の連結"; echo $a; // 出力:PHP 文字列の連結 $a .= "は" . "." ."や" . '.=' . "です"; echo $a; // 出力:PHP 文字列の連結は.や.=です |
Javascriptなどでは、+で連結しますよね。+の挙動は数値の足し算操作です。
1 2 3 4 5 6 7 8 9 10 |
<?php $foo = 1 + "10.5"; // $foo は float です (11.5) $foo = 1 + "-1.3e3"; // $foo は float です (-1299) $foo = 1 + "bob-1.3e3"; // $foo は integer です (1) $foo = 1 + "bob3"; // $foo は integer です (1) $foo = 1 + "10 Small Pigs"; // $foo は integer です (11) $foo = 1 + "10 Little Piggies"; // $foo は integer です (11) $foo = "10.0 pigs " + 1; // $foo は integer です (11) $foo = "10.0 pigs " + 1.0; // $foo は float です (11) |
php コロン(:)の意味
phpのソースコード中で見かける::は、クラス内で定義されている定数、クラスの静的なメンバ関数・プロパティ(変数)にアクセスするために使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php class クラス { const 変えられない定数 = 'const'; public static $静的な変数 = 'static value'; static function メソッド(){ return "method"; } } echo クラス::変えられない定数 . PHP_EOL; // 出力:const echo クラス::$静的な変数 . PHP_EOL; // 出力:static value echo クラス::メソッド() . PHP_EOL; // 出力:method |
php ー>の意味はクラスの変数、関数を呼び出します
ー>は、オブジェクト演算子と呼ばれています。アロー演算子と読んでいる人もいます。
クラスは型宣言、newでクラスを実体化したものがオブジェクトになります。
先ほどのコロン(:)の例では、定数やstaticを利用していました。
newをしなくてもアクセスできる定数やstaticで定義したプロパティ、関数へのアクセスは、::です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php class クラス { const 変えられない定数 = 'const'; public static $静的な変数 = 'static value'; static function メソッド(){ return "method"; } private $プロパティ = "プロパティ"; function __construct(){ echo "newされました。" . PHP_EOL; } function showValue(){ echo $this->プロパティ . PHP_EOL; $this->呼び出し回数++; } } echo クラス::変えられない定数 . PHP_EOL; // 出力:const echo クラス::$静的な変数 . PHP_EOL; // 出力:static value echo クラス::メソッド() . PHP_EOL; // 出力:method $c = new クラス(); // 出力:newされました。 $c->showValue(); // 出力:プロパティ |
クラス内からプロパティにアクセスする場合は、$thisを使います。
$this->プロパティでオブジェクトのプロパティ変数にアクセスできます。
関数の場合も同様に$thisをつける必要があります。
$thisをつけないアクセスは、ただの変数アクセスです。
$this->プロパティは、privateで宣言しています。
$this->呼び出し回数は、宣言していません。
宣言しなくても、エラーなく使えてしまうのがPHPです。
クラスやオブジェクトを詳しく知りたいって方は、
オブジェクト指向でクラスやオブジェクトの考え方が理解できると思います。
検索してみてください。
php =>の意味は、連想配列の値設定です
PHPはキーと値で管理できる配列が利用できます。
1 2 3 4 5 |
<?php $配列=array(1,2,3); $これは配列と等価です1[]=1;$これは配列と等価です1[]=2;$これは配列と等価です1[]=3; $これも配列と等価です2=array(0=>1,1=>2,2=>3); |
キーは整数もしくは文字列という制限があります。数字文字は数字としてキャストします。
キャストの例として、以下ソースは、キーが全て1を示します。
1 2 3 4 5 6 7 8 |
<?php $array = array( 1 => "a", "1" => "b", 1.5 => "c", true => "d", ); |
そのため、配列$arrayは1件しか存在しません。
$array[1]は、”d”になります。
php &の意味は参照です
&をつけた変数は、参照渡し、リファレンス渡しの変数で、同じ実体を示しています。
1 2 3 4 5 6 7 |
<?php $a = "a"; $b = &$a; $c = $a; $b = "b"; echo "${a} ${b} {$c}" . PHP_EOL; // 出力:b b a |
&をつけていない場合、同じものがコピーされます。
例えば、$aに10MBの配列が設定されている場合、$c=$aで20MBのメモリ容量を消費します。
&をつけるた$b = &$aは、10MBのまま消費する容量が2倍になることを防げます。
関数で呼び出し元の値を変更する場合に使われることが多いです。
1 2 3 4 5 6 7 8 9 10 |
<?php function 参照渡し( &$array ){ foreach($array as $index=>$value ){ $array[$index]=$value*2; } } $a = array(1,2,3); 参照渡し($a); echo "$a[0] ${a[1]} {$a[2]}" . PHP_EOL; // 出力:2 4 6 |
php ビックリマーク(!、!!、!!!)の意味
ビックリマーク(!)は、否定する意味です。if文などの条件文で利用します。
ビックリマーク(!)が2つ並んだ場合、否定の否定で、肯定を意味します。
ビックリマーク(!)が3つ並んだ場合、否定の否定の否定で、否定を意味します。
通常ビックリマークは1つでいいはずです。
1 2 3 4 5 6 7 8 9 10 |
<?php $a = true; echo $a ? "true" : "false" ; echo PHP_EOL; // 出力: true echo !$a ? "true" : "false" ; echo PHP_EOL;// 出力: false echo !!$a ? "true" : "false" ; echo PHP_EOL;// 出力: true echo !!!$a ? "true" : "false" ; echo PHP_EOL;// 出力: false echo !!!!$a ? "true" : "false" ; echo PHP_EOL;// 出力: true echo !!!!!$a ? "true" : "false" ; echo PHP_EOL;// 出力: false echo !!!!!!$a ? "true" : "false" ; echo PHP_EOL;// 出力: true |
上記は、三項演算子(条件 ? 条件が一致した場合の処理 : 条件が不一致の場合の処理 )を使っています。
php ?の意味、??の意味
?は三項演算子で使われています。三項演算子は、前節で例があるので参考にしてください。
php7からは、??でNull 合体演算子(Null coalescing operator)が使えます。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // $_GET['user'] を取得します。もし存在しない場合は // 'nobody' を用います。 $username = $_GET['user'] ?? 'nobody'; // 上のコードは、次のコードと同じ意味です。 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; // 合体演算子を連結することもできます。次のように書くと、 // $_GET['user']、$_POST['user'] そして 'nobody' // の順に調べて、非 &null; が定義されている最初の値を返します。 $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody'; |
Null 合体演算子を使うとソースコードの可読性が上がりやすいです。
php <=>の意味は値の比較です
<=>は、php7以降で使えるspaceship operatorです。一致する場合は0、左辺より右辺が大きい場合、ー1、左辺の方が大きい場合1になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php // Integers echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // Floats echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // Strings echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 |
php5で利用するとパースエラーになります。
まとめ
いかかがでしたでしょうか、「PHPのソースコードの意味がわかる10選」として、
初めてPHPソースコードを読んで、疑問と感じやすい、
- $は変数を意味します
- php アットマーク(@) 意味
- php ドット(.)、ドット=(.=)の意味は文字の連結です
- php コロン(:)の意味
- php ー>の意味はクラスの変数、関数を呼び出します
- php =>の意味は、連想配列の値設定です
- php &の意味は参照です
- php ビックリマーク(!、!!、!!!)の意味
- php ?の意味、??の意味
- php <=>の意味は値の比較です
をご紹介してきました。
PHPソースコードでわからない部分の助けになれば幸いです。