とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

ユーザー関数定義について(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1におけるユーザー定義関数について

<?php

//①冗長なlistの作成
$aaa = [                //配列の作成
  'a' => 'あいうえお',
  'ka' => 'かきくけこ',
  'sa' => 'さしすせそ'
];

foreach ($aaa as $ak => $av) {  //$aaaからキーを$ak、値を$avへ代入
  echo "・{$ak}:{$av}\n";      //繰り返し処理
}

$bbb = [                //配列の作成
  'k' => 'key',
  'v' => 'value',
  'i' => 'index'
];

foreach ($bbb as $bk => $bv) {  //上の繰り返し処理と同じ
  echo "・{$bk}:{$bv}\n";      //繰り返し処理
}


//②ユーザー関数定義ですっきり
function new_list($ccc) {        //new_listという名前の自作の関数の定義
  foreach ($ccc as $ck => $cv) { //new_list関数を実行するとこの処理が実行される
    echo "・{$ck}:{$cv}\n";
  }
}

$ddd = [
  'a' => 'あいうえお',
  'ka' => 'かきくけこ',
  'sa' => 'さしすせそ'
];

new_list($ddd);  //$dddを$cccに代入してnew_list関数を実行

$eee = [
  'k' => 'key',
  'v' => 'value',
  'i' => 'index'
];

new_list($eee);  //$eeeを$cccに代入してnew_list関数を実行

ユーザー定義関数とは、自分で勝手に作れる関数のことです。

ユーザー定義関数は似たような処理を何度も記述する手間を省いてくれたり、スクリプト変更時の修正の作業量を軽減するのに役立ちます。

 

上記①のスクリプトは、ただ配列をforeach文で出力しているだけです。

しかしforeach文の部分が関数化されていないので、同じようなコードを何度も何度も記述せねばならず、とってもめんどうくさいです。

 

そこで②のように、foreach文で作った繰り返し処理の部分をnew_listという名前で関数化してやります。

そうすると今後新しい配列を同様の繰り返し処理で出力する際に、いちいちforeach文をイチから記述することなく、ただパラメータを指定してnew_list関数を実行してやるだけで済みます。

 

 

ユーザー定義関数の定形は以下のとおりです。

 

function 関数名(パラメータ) {
   おこないたい処理;
}

 

 

パラメータの部分には変数宣言が入ります。

関数実行時にパレンティス(丸括弧)内に指定した値がその変数に代入されて、その値をもとに関数が処理されます。

 

ちなみに、処理の種類によっては関数に2つ上の引数が必要になる場合もあります。

そのような場合は、関数定義の際にパレンティス(丸括弧)内にパラメータをカンマ区切りで2つ3つと続けて記述していきます。

 

そうすることで、複数のパラメータを引数として関数内で使用することができます。

 

 

またユーザー関数を定義する位置ですが、これはファイルの先頭部分が好ましいらしいです。

自分しか見ないし弄らないスクリプトなら宣言の位置はどこでもいいのでしょうが、もしだれか他の人が見たり弄ったり可能性があるのなら、ユーザー関数の定義はできるだけファイルの先頭部分でおこなうのがより好ましいコーディングであると言えるでしょう。

 

 

returnで値を返すパターンについて。

<?php

function aaa($a1, $a2) {      //パラメータを2つ持ったaaa関数の作成
  $bbb = $a1 + $a2;           //1000+150を$bbbに代入
  return number_format($bbb); //returnで$bbbの値を返す

  echo 'ここは実行されない';  //関数の処理はreturnで終了する
}

$ccc = aaa(1000150);        //1000は$a1に、150は$a2に入る
echo "{$ccc}円です。";        //1,150円です。

ユーザー関数定義では、returnを使って返り値を作ることもできます。

 

なおreturnの特性として、returnと記述した行を処理した時点で、下行にどんなにコードが残っていたとしてもその関数の処理は強制的に終了します。

 

 

以上です。