avatar

php学习三 —— 函数应用

参考书籍《细说PHP》

函数

function 函数名([参数1,参数2,参数3])//参数不需要标明类型
{
函数体;
return;
}

PHP7以后增加了对返回类型的声明

function 函数名([参数1,参数2,参数3]) :类型
{
函数体;
return;
}

eg

function swap(&$left,&$right):void{....}
......
$a=1;$b=2;
vardump(swap($a,$b),$a,$b);//输出为NULL int(1) int(2)

可以在参数前添加类型限制,默认为对不符合要求的形参进行强制类型转换

若使用严格模式,则参数不满足要求时会报TypeError

<?php
//声明严格模式
declare(strict_type=1);
function ......

指定默认值:function demo($a=1); 允许使用NULL作为默认参数

作用域

在函数中无法使用全局变量

<?php
$one=100;
function demo(){
echo $one;
}
demo();//输出结果为0或者空,因为为未初始化的初值

在函数中如果想使用全局变量,应该使用下面的写法

<?php
$one=100;
function demo(){
echo $GLOBALS['one'];
}
demo();//输出结果为0,因为为未初始化的初值

在函数中声明静态变量:static $a=0;

可变个数参数的函数

funtion more_args(){
$args=func_get_args(); //将所有传递给脚本函数的参数当作一个数组返回
for($i=0;$i<count($args);$i++)
{
echo "第".$i."个参数是".args[$i]."<br>";
}
}

more_args("one","two","three",1,2,3)
function more_args(){
for($i=0;$i<func_num_args();$i++)
echo func_get_args($i);
}
more_args("one","two","three",1,2,3)

array(),echo(),array_merge()等函数也可以传递任意多个参数

//>=php5.6,使用...实现变长参数函数
function sum(...$ints){
return array_sum($ints);//返回数组所有成员求和的结果
}

//使用不同个数的参数调用函数
var_dump(sum('2','3',4.1,10,true));//输出"float(20.1)

//规定返回值类型
function sums(...$ints):int{
return array_sum($ints);//返回数组所有成员求和的结果
}
var_dump(sums('2','3',4.1,10,true));//输出“int(20)
//使用...将数组和可便利对象展开为函数参数
function add($a,$b,$c,$d){
return $a+$b+$c+$d;
}
$operators=[2,3,4];
echo add(1,...$operators);
//?,可以传递null参数
function fun(?$string){}
fun('xxx');fun(null);//都可以
fun();//不行

回调函数

变量函数

function one($a,$b){}
function two($a,$b){}
$result="one";
echo $result(2,3);//调用函数one

变量函数不能应用于echo、print、unset、isset、empty、include、require

使用变量函数声明应用和回调函数

function filter($fun){
for($i=0;$i<100;$i++){
if($fun($i))//调用和变量值同名的函数
continue;
echo $i.'<br>'
}
}

function one($num){ return $num%3==0;}
funtion two($num){return $num==strrev($num);}//回文数
filter("one");//打印出100以内的非3的倍数

借助call_user_func_array()函数自定义回调函数

funtion fun($a,$b){}
call_user_func_array('fun',array($a,$b));
function filter($fun){
for($i=0;$i<0;$i++){
if(call_user_func_array($fun,array($i)))
continue;
echo $i.'<br>';
}
}

类静态函数和对象的方法回调

class demo{
static function fun(){}
}
class test{
funtion fun(){}
}

call_user_func_array(array("Demo","fun"),array("aaa","bbb"));
call_user_func_array(array(new test(),"fun"),array("brophp","学习型php"))

递归函数

使用自定义库和函数

<?php
require 'config.php';//使用require语句包含并执行config.php文件
if($condition)
include 'file.txt';//使用include语句在,包含并执行file.txt文件
require ('somefile.txt');//使用require包含并执行

include在流程控制中使用,当php脚本读到它时,才将它包含的文件都进来

require在文件的开头和结尾使用,在脚本执行前读入索隐入的文件

include_once()\require_once() 文件只能被包括一次,避免函数重定义及变量重新赋值等问题

php匿名函数和闭包

$fun=funtion($param){//将一个没有名字的函数赋值给一个变量$fun
echo $param;
}
$fun('abcd');
Author: Michelle19l
Link: https://gitee.com/michelle19l/michelle19l/2020/06/05/php/php3/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶