ユーザー定義関数

PHPにはたくさんの関数があらかじめ用意されています。このように最初からPHPに用意されている関数を「組み込み関数」といいます。

ユーザー自らが勝手に「関数」を作り出すことも出来るのです。

これを「ユーザー定義関数」といいます。

書式 ユーザー定義関数の作成

function 関数名(引数){

   実行する処理

}

実際に例文を実行してみます。

下記のユーザー定義関数「hyouzyun」は、引数に175を指定してhyozyun(175)とすれば、勝手に身長175㎝の標準体重を書き出してくれます。

(例1)

<?php
hyouzyun(175);

function hyouzyun($s){
   $sc = $s /100;
   $sb =round($sc*$sc*22.1);
   print"標準体重は".$sb."kgです";
}
?>

実行結果1

f:id:mkyosuke:20191127143406p:plain

 

ユーザー定義関数hyouzyunを作成しておけば、標準体重を計算し書き出すことができます。

身長140cm~200cmの身長に対する標準体重の一覧が作れます。「100で割って、二乗して、22を掛けて、四捨五入して、print」という処理を61回繰り返し処理も、ユーザー定義関数「hyouzyun」を使えば記述が分かりやすくなります。

(例2)

<?php
for ($a =140; $a <=200;$a++){
   print"身長".$a."cmなら";
   hyouzyun($a);
   print"<br>";
}

function hyouzyun($s){
   $sc =$s/100;
   $sb =round($sc*$sc*22,1);
   print"標準体重は".$sb."kgです。";
}

実行結果2

f:id:mkyosuke:20191127140701p:plain

 

返り値のあるユーザー定義関数

例えば、PHPの組み込み関数でpi()はπを、round()は四捨五入した値を、strrev()は反転した文字列を返します。

ユーザー定義関数でも、関数が値を返すようにすることが出来ます。この場合は、次のように関数の定義の中にreturnを記述します。

書式

function 関数名(引数){

   実行する処理

    return 返り値;

}

先程の標準体重の例で、計算した標準体重の値を返すようにすると、下記のようになります。

(例3)

<?php
for ($a =140; $a <=200;$a++){
   print"身長".$a."cmなら標準体重は";
   print hyouzyun2($a);
   print"kgです。<br>";
}

function hyouzyun2($s){
   $sc =$s/100;
   $sb =round($sc*$sc*22,1);
   return $sb;
}

実行結果2と3は、同じになります。今度は関数hyouzyun2()自体が値を返すので「print hyouzyun2($a)」として値を書き出しています。

 

・変数のスコープ

実は、ユーザー定義関数は、必ず引数を指定しなければいけないというわけではありません。例えば、次を実行しても実行結果1と同じ結果となります。

<?php
hyouzyun3();

function hyouzyun3(){
   $s =175;
   $sc = $s /100;
   $sb =round($sc*$sc*22.1);
   print"標準体重は".$sb."kgです";
}
?>

実行結果

f:id:mkyosuke:20191127144229p:plain

関数hyouzyun3の中で変数$sに値(175)を代入しています。

しかしながら、下記の例4は、変数$sに175の値を代入してから関数hyouzyun4を実行します。

(例4)

<?php
$s = 175;
hyouzyun4();

function hyouzyun4(){
 $sc = $s/100;
 $sb = round($sc*$sc*22,1);
 print"標準体重は".$sb."kgです。";
}
?>

実行結果

f:id:mkyosuke:20191127145512p:plain

残念ながら「Notice: Undefined variable(変数が定義されていない)という警告が表示され、「標準体重は0kgです」と表示してしまいます。

要するに、PHPでは関数の外で定義した変数は、関数の中では利用できないという事です。

・スコープとは

関数の中で定義した変数を「ローカル変数」

関数の外で定義した変数を「グローバル変数」といいます。

PHPでは、グローバル変数は関数の外でしか利用できません。

また逆に、ローカル変数はその関数の中でしか利用することが出来ません。

次、例5を実行しても「Notice: Undefined variable」されます。

(例5)

<?php
f();
  print $a;

function f(){
  $a =1;
}
?>

グローバル変数は関数の外でしか利用できない」「ローカル変数はその関数の中でしか利用できない」というような、変数が通用する範囲のこをスコープ(Scope)といいます。

次は、グローバル変数とローカル変数が同じ変数名$aを使っているのですが、それぞれのスコープがちがうので別物として認識し動作しています。

(例6)

<?php
$a = 1;
   print "グローバル変数は{$a}<br>";
f();
function f(){
    $a = 5+5;
    print "ローカル変数は{$a}";
}
?>

実行結果6

f:id:mkyosuke:20191127152143p:plain

・globalでグローバル変数を利用する

実は「グローバル変数を関数の中でも利用可」にする方法があります。

次のようにglobalキーワードを使用します。

(例6)

<?php
$s =175;
hyouzyun6();

function hyouzyun6(){
   global $s;
   $sc = $s/100;
   $sb =round($sc*$sc*22,1);
   print"標準体重は".$sb."kgです。";
}
?>

実行結果

f:id:mkyosuke:20191127153107p:plain

グローバル変数が関数内でも使用できます。