PHPカスタム関數(shù)の高度な使用法
コールバック関數(shù)
コールバック関數(shù)は、匿名関數(shù)や変數(shù)関數(shù)と併用して、より美しく複雑な関數(shù)構(gòu)造を?qū)g現(xiàn)できます。
コールバック関數(shù)は、関數(shù)を処理するときにこの関數(shù)をよりカスタマイズしやすくするためのもので、この関數(shù)の呼び出しが許可されている場(chǎng)合、処理を連攜して支援するために関數(shù)を渡すこともできます。
<?php function woziji($one, $two, $func) { //規(guī)定:檢查$func是否是函數(shù),如果不是函數(shù)停止執(zhí)行本段代碼,返回false if(!is_callable($func)) { return false; } //把$one、$two相加,再把$one和$two傳入$func這個(gè)函數(shù)中處理一次 //$func是一個(gè)變量函數(shù),參見(jiàn)變量函數(shù) echo $one + $two + $func($one,$two); } //我們定義幾個(gè)函數(shù)試試 function plusx2($foo ,$bar) { $result = ($foo+$bar)*2; return $result; } function jian($x, $y) { $result = $x - $y; return $result; } //調(diào)用一下函數(shù),woziji,向里面?zhèn)魅雲(yún)?shù)試試 echo woziji(20,10,'plusx2'); // 輸出結(jié)果為 90 //將plusx2改成jian試試結(jié)果 echo woziji(20,10,'jian'); //輸出結(jié)果為 40 ?>
処理プロセスは次のとおりです:
仮引數(shù)$oneに20、$twoに10を代入し、$funcに2つの変數(shù)関數(shù)plusx2またはjianを代入します
woziji関數(shù)では、 plusx2 または jian が関數(shù)であるかどうかを判定し、関數(shù)でない場(chǎng)合は false を返し、関數(shù)であることを示します。したがって、$one = 20、$two =10 が加算されます。加算後、$one と $two は $func($one,$two) に取り込まれます。
それを取り込んだ後の$funcは変數(shù)であり、plusx2またはjianにすることができます。 plusx2の場(chǎng)合は、plusx2関數(shù)の$one = 20, $two = 10の2つの結(jié)果を$fooと$barに與えて
$foo + $barを2倍して返します。関數(shù)本體の操作: $one + $two + $func($one,$two);
このようにして、操作の主な結(jié)果が得られますこれでコールバック関數(shù)を理解できます。呼び出し番號(hào)でそれを渡し、それを関數(shù)名に渡し、関數(shù)名に () 括弧を追加します。変數(shù)関數(shù)として認(rèn)識(shí)してまとめて実行します。
変數(shù)関數(shù)
変數(shù)関數(shù)、変數(shù)関數(shù)とも呼びます変數(shù)関數(shù)の使い方は次のとおりです:
<?php function demo() { echo '天王蓋地虎'; } function test() { echo '小雞燉蘑菇'; } $fu = 'demo'; //把$fu變?yōu)榱薲emo,把demo后加上了一個(gè)括號(hào),就執(zhí)行函數(shù)了 $fu(); // 輸出為 天王蓋地虎 //把$fu的值改為test字符串再試試? ?>
匿名関數(shù)
私たちにとっての機(jī)能単に一時(shí)的な処理をするだけなので、関數(shù)を再利用する必要はありません。名前を付けるのは非常に面倒なので、匿名関數(shù)を使用したい場(chǎng)合は、それを処理する必要があります。それは変數(shù)に返されます。 匿名関數(shù)の最初の使用法は、代入値を変數(shù)に直接代入することであり、変數(shù)を呼び出すことは関數(shù)を呼び出すことです。
変數(shù)関數(shù)匿名関數(shù)<?php $greet = function($name) { echo $name.',你好'; }; $greet('明天'); //輸出 明天,你好 $greet('PHP'); // 輸出 PHP,你好 ?>コールバック匿名関數(shù)
<?php
function woziji($one,$two,$func)
{
//規(guī)定:檢查$func是否是函數(shù),如果不是函數(shù)停止執(zhí)行本段代碼,返回false
if(!is_callable($func))
{
return false;
}
//把$one、$two相加,再把$one和$two傳入$func這個(gè)函數(shù)中處理一次
//$func是一個(gè)變量函數(shù),參見(jiàn)變量函數(shù)
echo $one + $two + $func($one,$two); //結(jié)果為: 150
}
woziji(20,30,function($foo,$bar)
{
$result = ($foo+$bar)*2;
return $result;
}
);
?>
內(nèi)部関數(shù):
內(nèi)部関數(shù)とは、関數(shù)の中で関數(shù)を宣言することを指します。 注: 內(nèi)部関數(shù)名に既存の関數(shù)名を使用することはできません
関數(shù) a に內(nèi)部関數(shù)が定義されていると仮定すると、関數(shù) a を 2 回使用することはできません。
以下のコードを見(jiàn)てみましょう。すぐに學(xué)べます:
<?php function foo() { echo '我是函數(shù)foo喲,調(diào)一下我才會(huì)執(zhí)行定義函數(shù)bar的過(guò)程<br />'; function bar() { echo '在foo函數(shù)內(nèi)部有個(gè)函數(shù)叫bar函數(shù)<br />'; } } //現(xiàn)在還不能調(diào)用bar()函數(shù),因?yàn)樗€不存在 bar(); foo(); //現(xiàn)在可以調(diào)用bar()函數(shù)了,因?yàn)閒oo()函數(shù)的執(zhí)行使得bar()函數(shù)變?yōu)橐讯x的函數(shù) bar(); //再調(diào)一次foo()看看是不是會(huì)報(bào)錯(cuò)? foo(); ?>
上記の foo() 関數(shù)內(nèi)で bar 関數(shù)が定義されていることがわかります。これは內(nèi)部関數(shù)番號(hào)です。
慎重な観察と実験の後、次の結(jié)論を?qū)Г訾筏蓼?
1. foo() を 2 回呼び出すとエラーが報(bào)告されます2. bar 関數(shù)は foo