PHP函数

内部函数

<?php
header("Content-type:text/html;charset=utf-8");

function compute(){
    echo "开始计算啦</br>";

    function add($a, $b){
        return $a + $b;
    }
}

compute();  //调用外部函数
$a = 1;
$b = 2;
echo "$a + $b =".add($a, $b);   //调用内部函数

注意:只有当外部函数被调用时,内部函数才可以调用!

按值传递数组参数

<?php
header("Content-type:text/html;charset=utf-8");

function introduceMySelf($me){
    echo "本府".$me['name'].',年芳'.$me['age'].',尤好'.$me['hobby'];
}

$mo['name'] = '沫沫';
$mo['age'] = 20;
$mo['hobby'] = '唱歌';

introduceMySelf($mo);

引用传递

按值传递的参数在函数体中并没有操作,而是重新分配了一个完全一样的变量,有时时一种浪费。为了解决这个问题,PHP提供了引用传递的方式来传递参数。

具体使用时,只要在函数体定义中的参数前加上 & 字符即可。

<?php

header("Content-type:text/html;charset=utf-8");

function changeName(&$name){//前面加&,使用引用传递参数
    $name = '沫沫';
}

$girl = 'Mo';
echo "<p>调用函数之前:";
echo "我叫$girl";

changeName($girl);
echo "<p>调用函数之后:";
echo "我叫$girl";

在执行 changeName(&$name) 时,首先会申请一个临时变量 $name,但并没有将 $girl 的值赋给 $name,而是将 $girl 的内存地址赋给了 $name,这相当于给 $girl起了个别名叫$name,接下来函数体中访问$name,实质是间接访问 $girl,因此对 $name 的任何操作也会影响到$girl。函数变量$name的内存地址被释放,$name的内存地址依然存在。

可变函数

<?php
header("Content-type:text/html;charset=utf-8");

function add($a,$b){
    return $a + $b;
}

function sub($a,$b){
    return $a - $b;
}

$a = 1;
$b = 2;

$compute = 'add';
echo "$a+$b=".$compute($a,$b).'<br>';  //实际调用add函数

$compute = 'sub';
echo "$a-$b=".$compute($a,$b).'<br>';  //实际调用sub函数

匿名函数

PHP 内置函数 array_filter() ,其作用就是按照回调函数过滤数组元素。

<?php
header("Content-type:text/html;charset=utf-8");

function filter($var){
    return $var > 10;
}

$myarray = array(4, 5, 7, 12, 13, 15);
echo "<p>原数组:<br>";
print_r($myarray);

$newarray = array_filter($myarray, 'filter');
echo "<p>过滤后的数组:<br>";
print_r($newarray);

运行结果:

原数组:
Array ( [0] => 4 [1] => 5 [2] => 7 [3] => 12 [4] => 13 [5] => 15 )

过滤后的数组:
Array ( [3] => 12 [4] => 13 [5] => 15 )

如果使用匿名函数可以使得代码更加简洁优雅。

匿名函数的使用:

<?php
header("Content-type:text/html;charset=utf-8");

$myarray = array(4, 5, 7, 12, 13, 15);
echo "<p>原数组:<br>";
print_r($myarray);

$newarray = array_filter($myarray, function($var) { return $var > 10; });
echo "<p>过滤后的数组:<br>";
print_r($newarray);

注意,匿名函数只在 PHP 5.3.0 及其更高版本中提供。

posted @ 2019-06-22 15:35  你是真的菜啊  阅读(139)  评论(0编辑  收藏  举报