PHPカスタム関数の高度な使用法

コールバック関数

コールバック関数は、匿名関数や変数関数と併用して、より美しく複雑な関数構造を実現できます。

コールバック関数は、関数を処理するときにこの関数をよりカスタマイズしやすくするためのもので、この関数の呼び出しが許可されている場合、処理を連携して支援するために関数を渡すこともできます。

<?php
function woziji($one, $two, $func)
{
//规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false
   if(!is_callable($func))
   {
    return false;
   }
   //把$one、$two相加,再把$one和$two传入$func这个函数中处理一次
   //$func是一个变量函数,参见变量函数
   echo $one + $two + $func($one,$two);
}
  //我们定义几个函数试试
function plusx2($foo ,$bar)
{
$result = ($foo+$bar)*2;
return $result;
}
function jian($x, $y)
{
$result = $x - $y;
return $result;
}
//调用一下函数,woziji,向里面传入参数试试
echo woziji(20,10,'plusx2');   // 输出结果为 90
//将plusx2改成jian试试结果
echo woziji(20,10,'jian');   //输出结果为 40
?>

処理プロセスは次のとおりです:

仮引数$oneに20、$twoに10を代入し、$funcに2つの変数関数plusx2またはjianを代入します

woziji関数では、 plusx2 または jian が関数であるかどうかを判定し、関数でない場合は false を返し、関数であることを示します。したがって、$one = 20、$two =10 が加算されます。加算後、$one と $two は $func($one,$two) に取り込まれます。

それを取り込んだ後の$funcは変数であり、plusx2またはjianにすることができます。 plusx2の場合は、plusx2関数の$one = 20, $two = 10の2つの結果を$fooと$barに与えて

$foo + $barを2倍して返します。関数本体の操作: $one + $two + $func($one,$two);

このようにして、操作の主な結果が得られますこれでコールバック関数を理解できます。呼び出し番号でそれを渡し、それを関数名に渡し、関数名に () 括弧を追加します。変数関数として認識してまとめて実行します。

変数関数

変数関数、変数関数とも呼びます変数関数の使い方は次のとおりです:

<?php
function demo()
{
echo '天王盖地虎';
}
function test()
{
echo '小鸡炖蘑菇';
}
$fu = 'demo';
//把$fu变为了demo,把demo后加上了一个括号,就执行函数了 
$fu();   // 输出为 天王盖地虎
//把$fu的值改为test字符串再试试?
?>


匿名関数

私たちにとっての機能単に一時的な処理をするだけなので、関数を再利用する必要はありません。名前を付けるのは非常に面倒なので、匿名関数を使用したい場合は、それを処理する必要があります。それは変数に返されます。 匿名関数の最初の使用法は、代入値を変数に直接代入することであり、変数を呼び出すことは関数を呼び出すことです。

変数関数匿名関数

<?php
$greet = function($name)
{
echo $name.',你好';
};
$greet('明天');  //输出 明天,你好
$greet('PHP');   // 输出 PHP,你好
?>

コールバック匿名関数

<?php                
function woziji($one,$two,$func)
{                
//规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false                
    if(!is_callable($func))
    {                
    return false;                
    }                
    //把$one、$two相加,再把$one和$two传入$func这个函数中处理一次                
    //$func是一个变量函数,参见变量函数                
    echo $one + $two + $func($one,$two);  //结果为: 150                
}                
woziji(20,30,function($foo,$bar)
{                
$result = ($foo+$bar)*2;                
return $result;                
}
);                
?>

内部関数:

内部関数とは、関数の中で関数を宣言することを指します。 注: 内部関数名に既存の関数名を使用することはできません

関数 a に内部関数が定義されていると仮定すると、関数 a を 2 回使用することはできません。

以下のコードを見てみましょう。すぐに学べます:

<?php
function foo()
{
  echo '我是函数foo哟,调一下我才会执行定义函数bar的过程<br />';
   function bar()
   {
     echo '在foo函数内部有个函数叫bar函数<br />';
   }
 }
 //现在还不能调用bar()函数,因为它还不存在
 bar();
 foo();
//现在可以调用bar()函数了,因为foo()函数的执行使得bar()函数变为已定义的函数
 bar();
//再调一次foo()看看是不是会报错?
 foo();
?>

上記の foo() 関数内で bar 関数が定義されていることがわかります。これは内部関数番号です。

慎重な観察と実験の後、次の結論を導き出します:

1. foo() を 2 回呼び出すとエラーが報告されます

2. bar 関数は foo


の中にあるため、foo() 関数を調整しないと実行できません。
学び続ける
||
<?php function demo() { echo '天王盖地虎'; } function test() { echo '小鸡炖蘑菇'; } $fu = 'demo'; //把$fu变为了demo,把demo后加上了一个括号,就执行函数了 $fu(); // 输出为 天王盖地虎 //把$fu的值改为test字符串再试试? ?>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜