PHP自定义函数篇

PHP自定义函数

自定义函数定义

自定义函数是为了实现某一功能而实现的代码块,定义一次可以多次调用,主要有四部分组成

  1. 函数名
  2. 参数
  3. 逻辑
  4. 返回值

例如:

function add($num1,$num2){
    $num3=$num1+$num2;
    return $num3;
}

函数名:add

参数: n u m 1 、 num1、 num1num2

逻辑: n u m 3 = num3= num3=num1+$num2;

返回值:$num3

注意:自定义函数不一定都包含这四部分的内容,有些函数是没有函数名的,有些函数是没有参数的,有些函数是没有返回值的,可以业务逻辑灵活应用即可

函数的声明与调用

声明函数

关键字:function

函数名:下划线或字母开头(只能有字母、数字、下划线组成)

参数:可有可无

逻辑:实现的功能

返回值:函数处理后返回的结果(可以没有返回值,默认是NULL)

例如

function greet($word){
    echo $word;
}

函数名:greet

参数:$word

逻辑:echo $word;

返回值:没有

调用函数

greet('hello php');

输出结果:hello php

扩展知识:

  1. 函数名推荐使用驼峰式命名
  2. 定义的函数具有全局作用域
  3. 函数不支持重载
  4. 已经定义的函数不能重定义
  5. 不能取消已经定义的函数

变量的作用域

php中变量的作用域有以下三种情况

局部变量

在函数内部定义的变量成为局部变量,作用域在函数内有效,函数执行结束后便被回收。

function showNum(){
    $num=1;
    echo $num;
}

以上例子中, n u m 是 在 s h o w N u m 函 数 内 定 义 的 , 所 以 num是在showNum函数内定义的,所以 numshowNumnum是局部变量,在函数内有效,函数外不可以使用,如果你想像以下这样用

function showNum(){
    $num=1;
    echo $num;
}
echo $num;

php会报一个Notice错误,提示未定义$num.

全局变量

在函数外定义的变量,作用于php文件的生命期(开始执行到结束执行期间),如果先在函数内使用全局变量的话需要通过global或$GLOBALS来实现。

例如

// 全局变量
$num=1;
/**
 * 自定义函数
 */
function showNum(){
    // 函数内使用全局变量
    global $num;
    echo $num;
}
// 调用自定义函数
showNum();

或者

// 全局变量
$num=1;
/**
 * 自定义函数
 */
function showNum(){
    // 函数内使用全局变量
    echo $GLOBALS['num'];
}
// 调用自定义函数
showNum();

超全局变量

在函数内外都可以直接使用的变量,作用于php文件的整个生命周期,常用的超全局变量包括

$_GET;
$_POST;
$_SERVER;
$_SESSION;
$_COOKIE;
$_REQUEST;
$_FILES;
$GLOBALS;
$_ENV;

函数的参数

为函数提供额外的信息

function greet($name){
    echo 'hello '.$name;
}
greet('Trevor');

以上例子中,$name为参数,给greet提供了数据,所以可以在函数内部直接使用。

参数可以为零,也可以多个

函数的参数是不固定的,根据自己的业务实现。

function say(){
    echo 'hello php';
}
function add($num1,$num2){
    echo $num1+$num2;
}

可以为任意的数据类型(不包括资源类型)

可选参数与必选参数

有默认值得参数为可选参数,没有默认值的参数为必选参数。必选参数在调用时一定要填写,可选参数可以不填写,不填写时采用定义函数时的默认参数。

function showGrade($score,$subject='php'){
    echo $subject.':'.$score;
}

以上例子中, s c o r e 为 必 选 参 数 , score为必选参数, scoresubject为可选参数。

函数的形参与实参

形参

定义函数时的参数称为形参。

实参

调用函数时传递给函数内部使用的参数称为实参。

引用传递

调用函数时使用的是地址传递,传递的是该参数的地址,在函数内部改变传递的参数时会改变原生的值。

$num=1;
function changeNum(&$num){
    $num=$num+1;
}
changeNum($num);
echo $num;

在以上例子中, n u m 为 引 用 传 递 , 在 c h a n g e N u m 函 数 中 做 了 + 1 操 作 , 该 操 作 会 直 接 影 响 到 函 数 外 的 num为引用传递,在changeNum函数中做了+1操作,该操作会直接影响到函数外的 numchangeNum+1num的值,所以echo的值为2.

可变参数

定义函数时,如果无法确定该函数的参数个数,比如计算一个数列的平均值或总和之类的功能,这是我们就可以使用可变参数来定义该函数了。

获取函数的所有参数

func_get_args();

获取函数中的第n参数

func_get_arg(1);

1是表示获取第二个参数,因为编程是从0开始计数的

获取参数的个数

func_num_args();

例子

function countAvg(...$args)
{
    $params = func_get_args();
    $num=func_num_args();
    echo array_sum($params)/$num;
}
countAvg(2,4,6,8);

函数的返回值

  1. 可以没有return语句,没有时的默认返回值为NULL
  2. 返回值可以是任意数据类型(不包括资源类型)
  3. 使用return语句时将终止函数执行并将控制权转回调用该函数的代码行

匿名函数和回调函数

匿名函数:没有函数名的函数

$user=function ($name){
    echo 'Hello I am '.$name;
};
$user('Trevor');

回调函数:将另一个函数作为参数传递给函数使用

function user($name){
    echo 'Hello I am '.$name;
};
call_user_func('user','Trevor');

注:

call_user_func('functionName',$param1,$param2,...); // 参数以参数列表的形式传递
call_user_func_array('functionName',[$param1,$param2,...]);//参数以数组的形式传递

内部函数和有条件函数

内部函数:在函数内部定义的函数

function people(){
    echo 'I am a person.';
    function name(){
        echo 'My name is Trevor.';
    }
}
people();
name();

注:内部函数只有在外部函数被调用后才生效

条件函数:条件成立的时候定义的函数

$machine='plane';
if($machine=='plane'){
    function fly(){
        echo 'I can fly quickly';
    }
}
fly();

注:条件函数只有在条件后才生效,条件不成立时调用该函数的话会报错

递归函数

满足条件时,自己调用自己的函数称为递归函数。

比如遍历当前文件夹及子目录并生成文件树

function create_dir_tree($flig = 0,$j = '',$dir = './'){
    if(is_dir($dir)){
        if($handle=opendir($dir)){
            while(($file_dir=readdir($handle))!==false){
                if(is_dir($dir.'\\'.$file_dir)){
                       echo $j.'└── '.$file_dir."\n";
                       create_dir_tree(
                            $flig + 1,
                            str_pad($j,$flig + 1 ,"\t"),
                            $dir.'\\'.$file_dir);
                 }else{
                          echo $j.'├── '.$file_dir."\n";
                 }
            }
        }
    }
}

create_dir_tree();

可变函数

变量后面带有(),php会先解析变量的值,然后将其作为函数来调用。

function study(){
    echo 'I am studying php';
}
$learn='study';
$learn();
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值