Fungsi panggil balik
Fungsi panggil balik boleh digunakan dengan fungsi tanpa nama dan fungsi berubah untuk mencapai struktur fungsi yang lebih cantik dan kompleks.
Fungsi panggil balik adalah untuk menjadikan fungsi lebih disesuaikan semasa memproses fungsi Apabila memanggil fungsi ini, anda juga boleh meneruskan fungsi untuk bekerjasama dan membantu dalam pemprosesan.
<?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 ?>
Proses pemprosesan adalah seperti berikut:
Tugaskan 20 kepada parameter formal $one, 10 hingga $two, dan dua fungsi pembolehubah plusx2 atau jian ditugaskan kepada $func
Dalam fungsi woziji, tentukan sama ada plusx2 atau jian ialah fungsi Jika ia bukan fungsi, kembalikan palsu dan hentikan pelaksanaan
Paparan plusx2 Atau jian ialah fungsi. Oleh itu, $satu = 20, $dua =10 ditambah Selepas penambahan, $satu dan $dua dibawa ke dalam $func($satu,$dua).
dibawa masuk dan $func berubah-ubah dan boleh plusx2 atau jian. Jika ia adalah plusx2, dua keputusan $one = 20, $two = 10 memberikan $foo dan $bar dalam fungsi plusx2
$foo + $bar kali 2 dan kemudian kembali hasil ke lokasi pengiraan badan fungsi woziji: $satu + $dua + $func($satu,$dua);
Dengan cara ini, hasil utama operasi diperolehi
Sekarang kita memahami fungsi panggil balik: dalam panggilan balik, masukkan nama fungsi dan tambah () kurungan pada nama fungsi. Kenali ia sebagai fungsi pembolehubah dan laksanakannya bersama-sama.
Fungsi pembolehubah
Fungsi pembolehubah, kami juga akan memanggilnya fungsi pembolehubah
Penggunaan fungsi pembolehubah adalah seperti ini :
<?php function demo() { echo '天王盖地虎'; } function test() { echo '小鸡炖蘑菇'; } $fu = 'demo'; //把$fu变为了demo,把demo后加上了一个括号,就执行函数了 $fu(); // 输出为 天王盖地虎 //把$fu的值改为test字符串再试试? ?>
Fungsi tanpa nama
Kadangkala fungsi hanya untuk kita Untuk beberapa pemprosesan sementara, ada tidak perlu menggunakan semula fungsi tersebut. Sangat menyusahkan untuk memberi nama, jadi fungsi tanpa nama diperlukan untuk mengendalikannya
Oleh kerana fungsi tanpa nama tidak mempunyai nama, jika anda ingin menggunakannya, anda perlu. untuk mengembalikannya kepada pembolehubah.
Penggunaan pertama fungsi tanpa nama adalah untuk memberikan tugasan secara langsung kepada pembolehubah, dan memanggil pembolehubah ialah fungsi panggilan.
Fungsi tanpa nama fungsi pembolehubah
<?php $greet = function($name) { echo $name.',你好'; }; $greet('明天'); //输出 明天,你好 $greet('PHP'); // 输出 PHP,你好 ?>
Fungsi tanpa nama panggil balik
<?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; } ); ?>
Fungsi Dalaman:
Fungsi dalaman bermaksud fungsi diisytiharkan di dalam fungsi.
Nota:
Nama fungsi dalaman tidak boleh menjadi nama fungsi sedia ada
Dengan mengandaikan bahawa fungsi dalaman ditakrifkan dalam fungsi a, fungsi a tidak boleh digunakan dua kali .
Mari lihat kod di bawah, anda akan mempelajarinya dengan cepat:
<?php function foo() { echo '我是函数foo哟,调一下我才会执行定义函数bar的过程<br />'; function bar() { echo '在foo函数内部有个函数叫bar函数<br />'; } } //现在还不能调用bar()函数,因为它还不存在 bar(); foo(); //现在可以调用bar()函数了,因为foo()函数的执行使得bar()函数变为已定义的函数 bar(); //再调一次foo()看看是不是会报错? foo(); ?>
Anda akan mendapati terdapat fungsi bar yang ditakrifkan di dalam fungsi foo() di atas, iaitu nombor fungsi dalaman .
Selepas pemerhatian dan percubaan yang teliti, kami akan membuat kesimpulan berikut:
1 Memanggil foo() dua kali akan melaporkan ralat
2. Fungsi bar tidak boleh dilaksanakan tanpa melaraskan fungsi foo(), kerana bar berada di dalam foo