小白兔晒黑了

导航

 

5 创建可以接受个数可变的参数的函数

5.1 func_num_args 的使用

返回参数的个数

function mean_num()
{
    $sum = 0;
    $size = func_num_args() ;
    for ($i=0; $i < $size ; $i++) {
        $sum += func_get_arg($i);
    }
    $average = $sum / $size;
    $average = round($average,2);
    return $average;
}

$mean = mean_num(96,93,97);
var_dump($mean);

5.2 func_get_args的使用

返回参数的副本

function byVal($arg) {
    echo '原本1     : ', var_export(func_get_args()), PHP_EOL;
    $arg = '新参数1';
    echo '修改后1  : ', var_export(func_get_args()), PHP_EOL;
}

function byRef(&$arg) {
    echo '原本2     : ', var_export(func_get_args()), PHP_EOL;
    $arg = '新参数2';
    echo '修改后2  : ', var_export(func_get_args()), PHP_EOL;
}

$arg = '旧参数';
byVal($arg);
byRef($arg);

 计算平均数的另一种方法

function mean_get()
{
    $sum = 0;
    $numbers = func_get_args();
    $size = count($numbers) ;
    for ($i=0; $i < $size ; $i++) {
        $sum += $numbers[$i];
    }
    $average = $sum / $size;
    $average = round($average,2);
    return $average;
}

$mean = mean_get(96,93,97);
var_dump($mean);

6 返回变量的引用

过返回变量引用来允许函数外部代码修改变量值。这可以通过使用两个符号(&)作为函数参数类型声明来实现。

function &pc_array_find_value($needle, &$haystack)
{
    foreach ($haystack as $key => $value) {
        //返回对变量的引用
        if ($needle == $value) return $haystack[$key];
    }
}
$artists = array('王菲','谢霆锋','The Doors');
$html = &pc_array_find_value('谢霆锋',$artists);
var_dump($html);//string(9) "谢霆锋"
var_dump($artists);
$html = '窦唯';
var_dump($artists);

 

 返回值必须是对变量的引用,因为返回给一个非变量不具有任何逻辑上的意义。

7 返回多个值

function time_parts($time)
{
    return explode(':', $time);
}
list($hour, $minute, $second) = time_parts('12:35:56');

var_dump($hour);
var_dump($minute);
var_dump($second);

 

8 跳跃选择返回的值

function time_parts($time)
{
    return explode(':', $time);
}
list(, $minute, ) = time_parts('12:35:56');

var_dump($hour);
var_dump($minute);
var_dump($second);

 

9 返回失败信息

记得用 !==就可以了

10 调用可变函数

10.1 使用call_user_func()

function get_file($fileName)
{
    return file_get_contents($fileName);
}
$function = 'get_file';
$fileName = '6-08.php';
//第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
$text = call_user_func($function,$fileName);
var_dump($text);

 

10.1 使用call_user_func_array()

function put_file($fileName, $content)
{
    return file_put_contents($fileName, $content);
}

$action = $_GET['action'];
if ($action == 'get'){
    $fileName = 'get_file';
    $args = array('log.txt');
}else{
    $fileName = 'put_file';
    $args = array('log.txt','川普领先哈里斯');
}
$rs = call_user_func_array($fileName,$args);
var_dump($rs);

 

function logf()
{
    $date = date("Y-m-d H:i:s");
    $args = func_get_args();
    return  "$date:".call_user_func_array('sprintf',$args).PHP_EOL;
}
$log = logf("<a href='%s'>%s</a>",'http://www.baidu.com','百度');
echo $log;

11  在函数内部访问全局变量

11.1 基础使用

/**
 * 在函数内部访问全局变量
 * @param $fruit
 * @return void
 */
$chew_count = 3;
function eat_fruit()
{
    global $chew_count;
    for ($i = 0; $i < $chew_count; $i++) {
        //
        echo $i . "<br>";
    }
}
eat_fruit();

$chew_count2 = 3;
function eat_fruit2()
{
    for ($i = 0; $i < $GLOBALS['chew_count2']; $i++) {
        //
        echo $i . "<br>";
    }
}
eat_fruit2();

输出结果

11.2 更有效管理全局变量的方式

$age = 10;
$myGlobal = 'age';
global $$myGlobal;

var_dump($GLOBALS);

unset($GLOBALS[$myGlobal]);

var_dump($GLOBALS);

第一个var_dump($GLOBALS);

第二个var_dump($GLOBALS);

 

 12 创建动态函数

$arr =  array(3, 2, 5, 6, 1);
usort($arr,create_function('$a,$b','return strnatcmp($a,$b);'));
var_dump($arr);

echo "<br>";
$arr2 =  array(3, 2, 5, 6, 1);
usort($arr,function ($a,$b){
    return strnatcmp($a,$b);
});
var_dump($arr);

其实没啥用,不如用匿名函数,效果也是一样的

 

posted on 2024-10-25 18:40  小白兔晒黑了  阅读(5)  评论(0编辑  收藏  举报