PHP学习笔记8:函数

PHP学习笔记8:函数

image-20211129162010327

图源:php.net

定义

php的函数可以定义在任何地方,甚至是条件语句中:

function create_func(int $num){
   
    if ($num<10){
   
        function test(){
   
            echo "test function is called".PHP_EOL;
            echo "the \$num < 10";
        }
    }
    else{
   
        function test(){
   
            echo "test function is called".PHP_EOL;
            echo "the \$num >= 10";
        }
    }
}
create_func(10);
test();
// test function is called
// the $num >= 10

这个示例代码中create_func函数会根据传入参数的不同定义两个不同的函数,虽然这两个函数名称相同。

需要注意的是,php中函数一旦定义,其在全局作用域中都会生效,即可以在任何地方调用这个函数。

此外,在php中,是不能重复定义同名函数的,所以再次调用create_func函数会产生一个错误:

create_func(10);
// Fatal error: Cannot redeclare test() (previously declared in ...

参数

php8.0.0之后,函数的参数列表中,最后一个参数之后可以使用一个额外的,,这样做有助于编写长参数列表的函数:

function multi_params(
    $param1,
    $param2,
    $param3,
) {
   ; //do something
}

引用传递

默认情况下,函数传参都是值传递:

<?php
function double_num(int $num)
{
   
    $num = $num * 2;
}
$a = 2;
double_num($a);
echo $a . PHP_EOL;
// 2

要修改值需要使用引用传递参数:

<?php
function double_num(int &$num)
{
   
    $num = $num * 2;
}
$a = 2;
double_num($a);
echo $a . PHP_EOL;
// 4

当然,传递对象时是引用传递,这点依然不会改变:

<?php
class Student
{
   
    public $name = "";
    public $age = 0;
}
$std = new Student;
function change_student_name(Student $std, string $name)
{
   
    $std->name = $name;
}
change_student_name($std, "Jack Chen");
echo "{
     $std->name}" . PHP_EOL;
// Jack Chen

默认值

可以给参数指定默认值,默认值可以是常量、基础类型、数组、null等,但不能是变量或者函数调用:

function default_params($param1 = 1, $param2 = 2)
{
   ; //do something
}
default_params();

引用类型的参数也可以指定默认值:

<?php
class Student{
   

}
function default_params(?Student $student = null){
   
    ;//do something
}
default_params();

使用参数默认值的时候需要注意,要将有默认值的参数放在参数列表的尾部:

function add_two_str(string $str1, string
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值