函数
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);
|
可以在参数前添加类型限制,默认为对不符合要求的形参进行强制类型转换
若使用严格模式,则参数不满足要求时会报TypeError
<?php declare(strict_type=1); function ......
|
指定默认值:function demo($a=1); 允许使用NULL作为默认参数
作用域
在函数中无法使用全局变量
<?php $one=100; function demo(){ echo $one; } demo();
|
在函数中如果想使用全局变量,应该使用下面的写法
<?php $one=100; function demo(){ echo $GLOBALS['one']; } demo();
|
在函数中声明静态变量: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()等函数也可以传递任意多个参数
function sum(...$ints){ return array_sum($ints); }
var_dump(sum('2','3',4.1,10,true));
function sums(...$ints):int{ return array_sum($ints); } var_dump(sums('2','3',4.1,10,true));
|
function add($a,$b,$c,$d){ return $a+$b+$c+$d; } $operators=[2,3,4]; echo add(1,...$operators);
|
function fun(?$string){} fun('xxx');fun(null); fun();
|
回调函数
变量函数
function one($a,$b){} function two($a,$b){} $result="one"; echo $result(2,3);
|
变量函数不能应用于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");
|
借助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'; if($condition) include 'file.txt'; require ('somefile.txt');
|
include在流程控制中使用,当php脚本读到它时,才将它包含的文件都进来
require在文件的开头和结尾使用,在脚本执行前读入索隐入的文件
include_once()\require_once() 文件只能被包括一次,避免函数重定义及变量重新赋值等问题
php匿名函数和闭包
$fun=funtion($param){ echo $param; } $fun('abcd');
|