网安学记 13 ---- php 基础之函数

3 篇文章 0 订阅

2023.10.17

函数

1、初识函数

function 函数名([参数1, 参数2, ……])
{
函数体……
}

function:在声明函数时必须使用的关键字

函数名:要符合PHP的标识符,且函数名是唯一的,不区分大小写

[参数1, 参数2…]:外界传递给函数的值,它是可选的,多个参数之间使用逗号“,”分隔

函数体:函数定义的主体,专门用于实现特定功能的代码段

返回值:需要使用return关键字将需要返回的数据传递给调用者

函数只有被调用后,才开始真正执行函数中的代码,执行完毕,返回调用函数的位置继续向下执行1、通过函数名实现调用,可以在函数声明之前调用,也可在之后

2、如果函数有参数,可以通过传递参数改变函数内部代码执行

3、如果函数有返回值,当函数执行完毕后,函数名可以当作保存值的变量使用 

2、传参

①无参

function shout()
{
    return 'hello world';
}
echo shout();
// 输出结果:hello world

②按值传参数

<?php
function add($a, $b)
{
    $a = $a . $b;
    return $a;
}
echo add('hello ','world')
?>

默认值:

默认值必须是常量表达式,不能是变量。如果函数有多个参数,可以为多个参数指定默认值。但是,带默认值的参数只能位于参数列表的最后,即一个默认值参数的右边不能出现没有指定参数值的参数

错误定义正确定义
function setPoint($x,$y=0,$z)
{
    echo "{".$x.",".$y.",".$z."}";
}
function setPoint($x,$z,$y=0)
{
    echo "{".$x.",".$y.",".$z."}";
}

③引用传参

在开发中,若需要函数修改它的参数值,则需通过函数参数的引用传递。实现方式只需在参数前添加“&”符号即可

有&符号
<?php
    function add_some_extra(&$string)
// 引入变量,使用同一个存储地址
    {
        $string .= 'and something extra.';
    }
    $str = 'This is a string, ';
    add_some_extra($str);
    echo $str;
//输出结果:'This is a string, and something extra.'
?>
没有&符号
<?php
    function add_some_extra($string)
    {
        $string .='andsomethingextra.';
    }
    $str = 'This is a string, ';
    add_some_extra($str);
    echo $str;
//输出结果:'This is a string, '
?>

 ④参数类型设置

在PHP 7.0及以上的版本后,在自定义函数时,可以指定参数具体是哪种数据类型。

弱类型

<?php
    function aaa(int $a,string $b)
    {
        var_dump($a);
        var_dump($b);
    }
    aaa(6.6,6.6);
?>

结果: 

当用户调用函数时,如果传递的参数不是int类型,程序会将其强制的转换为int型后,再进行操作,这种方式称为弱类型参数设置。

强类型

当用户传递的参数类型不符合函数的定义,程序会报错提醒 

<?php
    declare(strict_types=1);
    function aaa(int $a,string $b)
    {
        var_dump($a);
        var_dump($b);
    }
    aaa(6.6,6.6);
?>

结果:

3、递归调用

递归调用:是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程,这种函数成为递归函数

示例:

//计算阶乘
<?php
function Fact($n)
{
    if($n <= 1)
    { return 1; }
    else
    { return $n * fact($n-1); }
}
echo "10 的阶乘为: " .Fact(10);
?>

函数的高级应用

1、静态变量

所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。

示例:

<?php
function aaa()
{
    static $i = 2;
    echo $i;
    $i*=$i;
}
function bbb()
{
    $i = 0;
    echo $i;
    $i++;
}
aaa();
echo "\n";
aaa();
echo "\n";
bbb();
echo "\n";
bbb();
echo "\n";
bbb();
echo "\n";
aaa();
?>

结果:

2、可变函数

可变变量:它的实现是在一个变量前添加一个“$”符号,就变成了另外一个变量

示例:

<?php
$hello="world";
$world="123";
echo $$hello;
//输出结果为 123
?>

可变函数:它的实现就是在一个变量名后添加一对圆括号“()”,让其变成一个函数的形式,然后PHP就寻找与变量值同名的函数,并且尝试执行它。(可变函数就是将定义好的函数名赋值给一个变量,然后通过这个变量来调用。)

<?php
//变量函数的用法
function demo()
    {echo "hello ";}
function demo1()
    {echo "world! ";}
$de='demo'; //将demo函数名赋给变量$de;
echo $de();//调用该变量名加();
$ee='demo1';//将demo1函数名赋给变量$ee;
echo $ee();
//输出: hello world!
?>

3、回调函数

回调函数(callback):指的就是具有callable类型的函数,一般用作参数的传递。如PHP内置函数call_user_func()可以接受用户自定义的回调函数作为参数。就是把函数作为参数传入进另一个函数中使用

<?php
function qwe($name,$age)
{ echo "我叫$name 我$age 岁了 <br>"; }
call_user_func('qwe', "张三",'18');
call_user_func('qwe', "李四",'24');
?>

4、匿名函数

匿名函数:就是没有函数名称的函数,也称作闭包函数,经常用作回调函数参数的值。对于临时定义的函数,使用匿名函数无需考虑函数命名冲突的问题。

匿名函数中使用外部的变量,需要通过use关键字实现。use关键字后圆括号“()”中的内容即为要使用的外部变量列表,多个变量之间使用英文逗号“,”分隔即可。

匿名函数仍然是函数,可以传入参数,直接把赋数赋值给变量,调用变量即为调用函数

<?php
$sum = function($a, $b)// 定义匿名函数
        {return $a + $b;};
echo $sum(100, 200); 
//输出结果:300
?>

匿名函数中使用外部的变量,需要通过use关键字实现。use关键字后圆括号“()”中的内容即为要使用的外部变量列表,多个变量之间使用英文逗号“,”分隔即可

<?php
$c = 100;
$sum = function($a, $b) use($c) 
{return $a + $b + $c;};
echo $sum(100, 200); 
// 输出结果:400
?>

除此之外,匿名函数还可以作为函数的参数传递,实现回调函数

<?php
function calculate($a, $b, $func)//回调函数
{ return $func($a, $b); }
echo calculate(100, 200, function($a, $b){ return $a + $b; });
echo calculate(100, 200, function($a, $b){ return $a * $b; });
?>

 PHP内置函数

1、字符串函数

函数名称功能描述
strlen()获取字符串的长度
srtpos()查找字符串首次出现的位置

strrpos()

获取指定字符串在目标字符串中最后一次出现的位置
str_replace()用于字符串中的某些字符进行替换操作
substr(str,start,end)用于获取字符串中的子串
explode()使用一个字符串分割另一个字符串
implode()用指定的连接符将数组拼接成一个字符串
trim()去除字符串首尾处的空白字符(或指定成其他字符)
str_repeat()重复一个字符串
strcmp()用于判断两个字符串的大小
substr_replace()把字符串的一部分替换为另一个字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z时代.bug(゜▽゜*)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值