PHP超初心者のメモ
初心者の私が、PHPを勉強していて少し気になったことを自分用にメモしています。 少しずつ足していきます。
phpのスコープ
phpでfor文やif文の中はブロックスコープになりません。 関数の中はブロックスコープになります。
<?php function func(){ $hoge = '1'; } var_dump($hoge); // NULL ?>
もしfor文などの中で変数を定義した場合は、その後利用しないのであれば、unset
したほうがよさそうです。
<?php $a = [1,2,3]; foreach ( $a as $value){ $b = 2; $value += $b; } var_dump($b); // int(2) unset($b); var_dump($b); // NULL ?>
引数の参照渡し
関数の引数の頭に & をつけると引数の修正が可能になります。
<?php function func(&$var){ $var ++; } $hoge = 1; func($hoge); echo $hoge; //1 ?>
引数を参照渡しにするケースがあるのかが疑問でしたが、以下のように使う場合無駄な変数を定義しなくてすむので便利です。
<?php function func(&$var){ return $var += 10; } $hoge = 1; echo func($hoge); //11 ?>
タイプヒンティング(型宣言)
関数にわたす引数の型を定義することができます。
<?php function func(int $var){ return $var + 10; } $hoge = 1; func($hoge); echo $hoge; //1 ?>
phpでクロージャーを使う
phpでクロージャーを利用する場合、親スコープから変数を引き継ぐ場合にuse
を利用する必要があります。
<?php $count = function(){ $n = 0; return function() use (&$n){ return ++$n; }; }; $func = $count(); echo $func(); // 1 echo $func(); // 2 echo $func(); // 3 ?>
定義済み関数の取得
PHPには定義済みの関数があります。 1つは、PHPにで利用できる関数。 もう一つは、プラグインなどをインストールすることで利用できる関数です。
どのような定義済み関数があるか以下で確認できます。 でもたくさんありすぎて見ずらいです。。。
<?php var_dump(get_defined_functions()); ?>
$self と $thisの使い分け
$self と $thisの使い分けがいまいちわかりませんでした。 簡単な使い分けとしては以下になるのでしょうか。。。
$self ・・・ 自クラスの静的(static)プロパティや、メソッドにアクセスするときに使う $this ・・・ 自クラスの動的(staticがついていない)プロパティやメソッドにのアクセスするときに使う