可变函数
-
定义:
变量名后有圆括号, PHP 将寻找与变量的值同名的函数, 并且尝试执行它;
通过变量名来执行函数:
<?php
function get_apple($nums) {
return '我需要'.$nums.'斤 apple';
}
$get_fruit = 'get_apple';
echo $get_fruit(200); // => 我需要200斤 apple
?>
通过传递的变量名来执行对应的函数:
<?php
function get_apple($nums) {
return '我需要'.$nums.'斤 apple';
}
function get_orange($nums) {
return '我需要'.$nums.'斤 orange';
}
function get_fruit($fruit, $nums) {
$str = 'get_'.$fruit;
return $str($nums);
}
echo get_fruit('apple', 200); // => 我需要200斤 apple
echo '<br />';
echo get_fruit('orange', 30); // => 我需要30斤 orange
?>
嵌套函数
-
定义:
PHP 嵌套函数有一些特别之处, 最特别的是, 当外部函数被调用时, 内部函数就会自动进入全局域中, 成为新的定义函数
<?php
function out() {
echo 'out';
function in() {
echo 'in';
}
}
// in(); // 如果直接调用in 报错, 需要先调用 out 再调用 in
out(); // => out
echo '<br />';
in(); // => in
echo '<br />';
out(); // 再次调用 out 报错
?>
上面的例子中, 如果直接调用in 报错, 需要先调用 out 再调用 in:
如果我们想再次调用 out, 程序会报错, 这是我们需要加入判断,
function_exists(): 判断函数有没有被定义,
看下面的例子:
<?php
function out() {
echo 'out';
if (!function_exists('in')) {
function in() {
echo 'in';
}
}
}
// in(); // 如果直接调用in 报错, 需要先顶用 out 再调用 in
out(); // => out
echo '<br />';
in(); // => in
echo '<br />';
out(); // => out
echo '<br />';
in(); // => in
?>
递归函数
-
定义: 函数在它的函数体内调用它自身, 这种函数成为递归函数.
-
分解问题, 调用自身, 比如: 阶乘 n!, 输出一个树层级结构等
求 N!:
<?php
function recursive ($n) {
if ($n < 0) {
return 0;
}
$total = 1;
echo "当前参数: {$n}".'<br />';
if ($n === 1) {
echo "\$n={$n}, \$total={$total}".'<br />';
return 1;
} else {
$total = $n * recursive($n -1); // 调用自身
}
echo "\$n={$n}, \$total={$total}".'<br />';
return $total;
}
echo recursive(4);
?>
N! 结果
匿名(闭包函数)
-
定义:
匿名函数 (Anontmous functions), 也叫闭包函数 (closures), 允许临时创建一个没有指定名称的函数. 最经常用作回调函数 (callback) 参数的值. -
闭包函数可以作为变量的值来使用
<?php
$example = function ($name) {
echo $name;
};
$example('guoyou'); // => guoyou
?>
作为 callback
<?php
function closure ($name, Closure $callback) {
echo "Hi, {$name}, ";
$callback();
}
closure('guoyou', function () {
echo '欢迎登陆';
}); // => Hi, guoyou, 欢迎登陆
?>
函数代码复用
- include:
- require:
- include_once:
- require_once:
详细内容看: PHP 的 include require include/require_once -- PHP 学习 (七)
网友评论