のぐそんブログ

暗いおじさんがシコシコ書くブログです。

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がついていない)プロパティやメソッドにのアクセスするときに使う