読者です 読者をやめる 読者になる 読者になる

Webデザインの勉強 ハロートレーニング 受講生のためのWebデザインの勉強補足ブログ

関数

関数とは

  • 関数とは、「機能単位の処理のひとかたまり」のことで、プログラムは関数の組み合わせによって、構成されています
  • プログラムのソースが長文で複雑になった場合、機能別にいくつかの関数に分割することによって、分かりやすく、修正しやすいプログラムとなります
  • 標準関数と同様でプログラムロジックの再利用ができるようになります

関数の作成

  • 自分で作る関数は機能単位で作成します
  • その機能のプログラムを再利用できるようにするためです
関数の構文


function 関数名( 【引数1, 引数2, 引数3・・・】 ) {
処理;
【return文;】
}


関数名の定義

  • 関数には関数名が必ず必要です
  • 関数の名前を付けます
  • 関数に名前を付けることによって他のプログラムで呼び出して利用することができるようになるのです
  • 関数名は任意ですが、予約語PHPで既に使用している関数名など)は使用しないようにします
  • また、関数の機能がイメージできるような名前にします


引数用の括弧()を記述

  • 関数名の後ろには、「()(括弧)」を書きます
  • これは、引数(値を受け取るための変数)を記述するためのものです


引数の定義

  • 引数用の括弧()の中に値の受け渡しが必要な数だけ、変数を定義します。ここでは2つ定義しています
  • 値の受け渡しがない場合は、定義する必要はありません


処理用の中括弧{}と処理の記述

  • 引数を受けるための「()(括弧)」の後は、「{}(中括弧)」を書きます
  • この中括弧の中にこの関数の処理内容を記述します
  • 関数の処理は、その関数の機能である処理内容を記述します
  • そして、計算結果やファイル内容など、処理結果を呼び出し元のプログラムに戻したい場合は、通常一番最後に、return文という構文を記述します
  • これを戻り値と呼びます

引数と戻り値

  • 引数と戻り値は、関数とその関数を利用するプログラムとの間でやりとりする値です
  • 値をやりとりすることによって、処理を進めていきます
  • 引数は、関数を呼び出すプログラムが引き渡す値です
引数
  • 引数は、実行するプログラムが関数に引き渡す値で、関数名の後にある「( )(括弧)」の中に記述します
  • 「( )(括弧)」の中に複数の変数を定義すれば、複数のデータを引き受けることができます。
関数名( 変数1, 変数2, 変数3,・・ )
  • 引数の値を持っている場合
function getAvg( $x, $y, $z ) {  // 引数3つを引き受ける変数定義
    ・・・・・・・・    // この関数の処理内容を記述
    
    return 戻り値;
}
  • 引数が無い場合
function getAvg( ) {
    ・・・・・・・・    // この関数の処理内容を記述
    
    return 戻り値;
}
戻り値
  • 戻り値は、先に学習したように、関数の処理結果を呼び出し元のプログラムに戻す役割があります
  • 例えば、計算した結果、ファイルから取得したデータなどです
  • 関数の処理が記述されている中括弧{}の中の一番最後にreturn文として記述します
function 関数名( 引数1, 引数2, 引数3・・・) {
    ・・・・・・・・ // この関数の処理内容を記述
    
    return 戻り値;// 処理した結果の値
}
  • 引数の$xと$yと$zの平均値を戻り値として返している場合
function getAvg( $x, $y, $z ) {  // 引数3つを引き受ける変数定義
    $avg = ( $x + $y + $z ) / 3; // この関数の処理内容を記述
    
    return $avg;// 戻り値
}


引数として点数の数字が引き渡されて、その点数を基に評価判定を行う関数です。戻り値として、評価判定のA、B、C、D、Eのどれかが戻されます。

function getHyoka( $tensu ) {  // 引数1つを引き受ける変数定義

    // 注意:変数$tensu$hyokaは、{ }内でのみ使用可能です。

    if( $tensu >= 80 ) {
        $hyoka = 'A';
    }else if( $tensu >= 70 ) {
        $hyoka = 'B';
    }else if( $tensu >= 60 ) {
        $hyoka = 'C';
    }else if( $tensu >= 50 ) {
        $hyoka = 'D';
    }else{
        $hyoka = 'E';
    }
    
    return $hyoka;  // 戻り値
}


《戻り値がない関数の例》

  • 関数内で何らかの処理を行いますが処理結果を返さないケースです
  • 評価を取得する関数を変更して、評価結果を画面出力する関数にしています
  • 評価結果を表示するのみで戻り値はありません
function getHyoka( $tensu ) {// 引数1つを引き受ける変数定義

    // 注意:変数$tensu$hyokaは、{ }内でのみ使用可能です。

    if( $tensu >= 80 ){
        $hyoka = 'A';
    }else if( $tensu >= 70 ){
        $hyoka = 'B';
    }else if( $tensu >= 60 ){
        $hyoka = 'C';
    }else if( $tensu >= 50 ){
        $hyoka = 'D';
    }else{
        $hyoka = 'E';
    }
    
    printf ( "評価は、%sです。", $hyoka );
}

関数の利用

  • 関数を利用することを、「関数を呼び出す」とも言います
  • 関数の呼び出し方は、処理の中でその関数名を記述し、引数があれば値を括弧()の中に記述、戻り値があれば戻り値を代入する変数を記述するだけです

変数のスコープ

  • 変数の宣言方法を変えることにより、変数の有効範囲も変わります
  • これを変数のスコープと呼びます
  • 変数は、「{ }(中括弧)」で囲まれた中で定義をすると、その囲まれた中でのみ有効となります。その外側では、使用することができません
  • 括弧内の処理が終了すると、その変数はアクセスできないだけではなく、やがてメモリー上からも消えてしまいます
  • しかし、グローバル変数、スーパーグローバル変数は有効範囲(スコープ)が広がり、「{ }(中括弧)」の外でも使用できるようになります

グローバル変数

<?php
    $a = 1;

    function OutPut()
    {    // "$aの値(OutPut()内)は「」です"が出力されます
        echo '$a' . "の値(OutPut()内)は「" . $a . "」です<br>";    /* ローカル変数の参照 */ 
    } 

    OutPut();
    
    // "$aの値(OutPut()内)は「1」です"が出力されます
    echo '$a' . "の値(OutPut()外)は「" . $a . "」です";


《実行結果》

$aの値(OutPut()内)は「」です
$aの値(OutPut()外)は「1」です


関数内で$aの値が出力されないのは、OutPut関数の{ }内で、グローバル変数の宣言を行っていないからです。
ローカル変数である$aに対して(OutPut関数の{ }内で)代入処理を行っていないため、値は設定されないのです。

  • 以下のようにOutPut関数の{ }内で、$aに対してグローバル変数宣言を行えば使えるようになります
<?php
    $a = 1;

    function OutPut()
    { 
        global $a;    /* グローバル変数として宣言する */ 
        
        // "$aの値(OutPut()内)は「1」です"が出力されます
        echo '$a' . "の値(OutPut()内)は「" . $a . "」です<br>";
    } 

    OutPut();
    
    // "$aの値(OutPut()外)は「1」です"が出力されます
    echo '$a' . "の値(OutPut()外)は「" . $a . "」です";
  • このように、globalを宣言することにより、関数の{ }内でも関数の{ }外でも使用可能となります

スーパーグローバル変数

  • globalを宣言する以外に、スーパーグローバルと呼ばれている$GLOBALSという連想配列を使って変数の有効範囲を意識することなく使用する方法もあります



$GLOBALS[ "変数名" ];

<?php
    $a = 1;

    function OutPut()
    {
        // 連想配列$GLOBALSのキーとして、$aを指定
        // これにより$aは関数の外でも使用可能となります
        $GLOBALS["a"] = $GLOBALS["a"] + $GLOBALS["a"] + 8;
    } 

    OutPut();
    
    // 10 が出力されます
    echo "$a<br>";
    
    // 10 が出力されます
    echo $GLOBALS["a"];


広告を非表示にする