PHPの勉強!その4〜ユーザー定義関数

プログラミング
スポンサーリンク

p太郎です(´・ω・`)



久しぶりのPHPです。

前回はこちら





勉強はしてたのですが、イマイチどうブログに書けばいいのかわからないような箇所を勉強していたので、しばらく書けていませんでした。



暗記系ですね。

主に組み込み関数を勉強していたのですが、まぁ覚えられないこと。

単純な暗記って苦手なんですよね・・・。

また使う時に、「そういえばあんなんあった気がする・・・」くらいに調べられるようになってれば問題ないやろって事で、暗記はそこそこに次に進めました(´・ω・`)



ちなみにですが、勉強には「独習PHP」を使っています。



ユーザー定義関数とは


読んで字の如く、ユーザーが自分で作る関数の事ですね(´・ω・`)



引数と、戻り値を関数に設定しておく。

呼び出し側で引数を関数に入れて呼び出すと、あらかじめ作成していた関数が処理を行なって、戻り値を返す・・・。

って感じです。

今までやっていたJavaでは関数と言わずにメソッドと呼んでいました。

なにが違うのか調べてみたところ



メソッド・・・オブジェクト指向プログラミングにおいてオブジェクトの一部として定義されている関数
関数・・・オブジェクト関係ない



って感じらしいです。

そんな気にしなくていい感じですかね(´・ω・)

基本的な関数の書き方


<?php
    function sum(float $num1, float $num2) : float{
        return $num1 + $num2;
    }

    print sum(5, 11);
?>

こんな感じ



$num1$num2・・・引数

return ・・・戻り値

:float・・・戻り値の型を指定

print sum(5, 11); ・・・関数の呼び出し



という感じです。

引数と戻り値の型は省略できるようです。


外部ファイルの関数を読み込む

  1. require
  2. inculude
  3. require_once
  4. inculude_once


require、require_onceは指定されたファイルが見つからなかったら、Fatal Errorを発生させる。

inculude、inculude_onceは指定されたファイルが見つからなかったら、warningを発生させる。

require_onceinculude_onceは指定されたファイルが読み込み済みの場合、処理をスキップさせる。


引数

デフォルト値を設定


こんな感じで呼び出す際、引数を省略した場合はデフォルト値が適用されるようにもできる。

<?php
    function sum(float $num1 = 2, float $num2 = 5) : float{
        return $num1 + $num2;
    }

    print sum();
?>



引数を参照渡し


関数を定義する際、引数に「&」を付けると参照渡しができる。

<?php
    function plus(float &$num) : float{
        $num++;
        return $num;
    }

    $num = 10;
    print plus($num);
    print '<br>';
    print $num;
?>


参照渡しする事でprint $num; の結果も11となる。


可変長引数


あらかじめ引数の数を決められない場合は可変長引数を使う。

関数で定義する際、引数の手前に「…」を付ける。

<?php
    function sum(float ...$num) : float{
        $resulut = 0;
        foreach($num as $value){
            $resulut += $value;
        }
        return $resulut;
    }

    print sum(3,5,7);
    print '<br>';
    print sum(2,4,6,8);
?>


これで、引数の数を自由に指定できる。


ただし、通常の引数と可変長引数を混在させる場合は、関数で定義する際、可変長引数を末尾にしなければならない。


戻り値

複数の戻り値

複数の戻り値を返したい場合、配列として値をまとめて返す。

<?php
    function multiple(float $num1, float $num2): array{
        $plus = $num1 + $num2;
        $minus = $num1 - $num2;
        return [$plus, $minus];
    }

    list($plus, $minus) = multiple(10, 5);

    print '足し算は'.$plus;
    print '<br>';
    print '引き算は'.$minus;
?>



戻り値を受け取る際、list()で変数にそれぞれ戻り値を格納しています。


無名関数

その場限りの使い捨て関数を定義できます。

<?php
    function program(array $array, callable $fun){
        foreach($array as $key => $value){
            $fun($key, $value);
        }
    }

    $gengo = ['Java' => 'サーバサイド', 'JavaScript' => 'フロントサイド', 'PHP' => 'サーバーサイド'];

    program($gengo, 
        function($key, $value){
            print "{$key}:{$value}";
            print '<br>';
        }
    );
?>


program()を呼び出す際に引数として無名関数を渡しています。

function($key, $value)ですね。

functionキーワードの後に関数名が無いのが無名関数の特徴です。



ちなみに関数に関数そのものを渡したり戻り値として返す関数を高階関数というそうです。



ジェネレータ


普通の関数がreturnで値を返したら終わることに対して、ジェネレータは処理を終えることなく、yieldで都度、値を返してくれる。

<?php
    function gen(){
        yield 1;
        yield 2;
        yield 3;
    }

    foreach(gen() as $value){
        print $value;
    }
?>

終わりに


高階関数辺りから脳みそ疲れてきました(´・ω・)

関数の引数に関数入れて、関数呼び出して・・・




(ノД`)・゜・。




ジェネレータのyieldなんかはJavaにもyield()とかあった気がします。

並列処理かなんかでやった気がする。

Javaと違ってPHPではメソッドではなく命令なんですね(´・ω・)



勉強も徐々に難しくなってきて、へとへとになってきました。



次の章はオブジェクト指向プログラミングのようです。

Javaやってなかったらチンプンカンプンやったんやろなと思うと勉強していてよかったなと思います・・・。


また書けそうなことあったら書きます(´・ω・)





今回も最後まで見ていただきありがとうございました!
ランキングに参加していますので、よろしければ↓をクリックで応援よろしくお願いします!

ブログランキング・にほんブログ村へにほんブログ村


人気ブログランキング

コメント

タイトルとURLをコピーしました