PHP函数的相关参数

形参

function parameter($a,$b)
{

}
//argument
 parameter(1);
 Warning: Missing argument 2 for parameter()

 parameter(1,2,3);
 没问题

函数调用完,形参就随着函数离去了
但是实参呢,还是一直保留

传进去的 参数可以是表达式,但是函数定义的时候,形参不可以是表达式

function youknow($b,$c)
{
    $c= $b +$c;
    echo $c;

}
$a=123;
$b=456;
youknow($a+$b,2,3);

默认值

比如定义一个数据库,默认的账号密码,还有DSN是固定的对吧,就可以做一个默认值,这样就不需要每次都传进去了

function hi($a1=1,$a2=2,$a3=3)
{
    echo 'a1 is:',$a1,"\n";
    echo 'a2 is:',$a2,"\n";
    echo 'a3 is:',$a3,"\n";

}
hi(null,22,undefined);

最好把要当做默认值的放在最后边吧,不然每次都用个NULL,用NULL吧,又会把默认值改了

function greet_to_someone($name,$is_normal=false)
{
    // if($is_normal?true:false )
    
    if( $is_normal? true : false)
    {
        echo "Hello ",$name,"\n";

    }
    else
    {
        echo "Hi ",$name,"\n";
    }

}
greet_to_someone('Lily',1);

强类型

echo 1236+'aaa';
=1236
//字符串不见了

echo 1236+'1aaa';
=1237

echo 'aa234'+'a1aaa';
echo 'aa234','a1aaa';
第一个是等于0
第二个是等于字符串拼接

如果我告诉你,我要的是INT,你要是敢给我一个FLOAT,那就叫PHP终止运行

function AandB($a,$b)
{
    return $a+$b;

}
echo AandB(1,2);

// 现在声明,传进来的两个参数一定需要是INT
//不过这个时候,你传一个浮点进来,他回话造成数据丢失。
function AandB2(int $a,int $b)
{
    return $a+$b;

}
echo AandB2(1.2,2);

//现在告诉PHP,如果我要是INT,你传进来非INT,那就直接抛出错误,防止造成数据精度丢失
declare(strict_types=1);
function AandB3(int $a,int $b)
{
    return $a+$b;

}
echo AandB3(1.2,2);

这个NULL就这么厉害?无论我指定什么类型,都是传一个NULL进来,坑哦

可变参数

也就是说,传进来的参数不确定是多少个,有可能有,也可能没有,有可能多,也有可能少

function ChangeNumbers(...$numbers)
{
    //如果数组是空的
    if (!$numbers) {
        return 0;
    } else {
        $temp = 0;
        foreach ($numbers as $getonevalue) {
            $temp += $getonevalue;
        }
        return $temp;
    }
}
echo ChangeNumbers(1,2,3,4,5,6,7,8,9);

实参

值传递
只能是实参传递给形参,但是形参呢,修改不了函数外边的实参,
当然你用GLOBALS,global这两个超全局变量就可以了

$a = 123;
function test($a)
{
    global $a;
    $a += 1;
    return $a;
}
echo test(123);
echo "\n", $a;
这个世上,$a变成了

引用传递
有点类似与C的指针
&引用传递还是有作用域的,并没有办法说一个指针指完天下的
在这里插入图片描述

变量的作用域

  1. 在A文件声明的变量,在函数内,类内,以及其他文件内。都是失效的,
  2. 在函数内声明的变量,只在函数内有效,
  3. 在类声明的属性(不叫变量了,呵呵),只在该类有效,不过继承之后好像是PUBLIC的可以???

如果A文件引用了B文件,那边里边的所有定义的变量还有函数,以及类。都可以在A里边用啦
不信看图

在这里插入图片描述
4. 局部变量
5. 全局变量

如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。
在这里插入图片描述

  1. 静态变量STATIC

跟C的很像
函数运行完毕,里边的变量就会被释放掉,
如果不想要里边的数据被释放,可以用GLOBALS超全局变量,或者说用STATIC
在这里插入图片描述
然后再试试先进的STATIC
在这里插入图片描述
假如没有用这两个办法来干预,看看会如何
在这里插入图片描述

不过static赋值的时候,不可以是函数表达式。
看看GLOBALS能不能是函数表达式。
或者直接static =$aa?
在这里插入图片描述
也不可以是函数的哦。没办法,static就规规矩矩来一个常量就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值