php7.0函数手册,0.7 PHP 函数

函数是可以在程序中重复使用的语句块,在页面加载时函数不会立即执行,只有在被调用时才会执行。

//无返回值

function (par1,par2,par3...){

code;

}

//有返回值

function (par1,par2,par3...){

return result;

}

在代码执行过程中,如果遇到函数则会进入函数作用域,直到遇到 return 或执行完毕后,回到外层函数名的位置,继续执行后面的代码。

6fc083551a69

temp.png

参数

形参

1. 形参一定是变量名;

function dosomething($par1,$par2){} // √

function dosomething($par1,par2){} // ×

2. 只在当前函数中有效;

function dosomething($par1){

echo $par1; // √

}

dosomething('11'); // 11

echo $par1; // ×

3. 设置默认参数;

function dosomething($a,$b=2){ //$b=2 为默认参数设置

$result=$a*$b;

return $result;

}

echo dosomething(2,4); //8

$box1=dosomething(199); //398

echo $box1;

▁ 参数默认值不能为对象、资源类型;

▁ 在低版本中,参数不能直接传递变量,需要使用 & 符号;

实参

1. 实参可以是标量、变量;

2. 实参跟形参应一一对应;

参数数量

1. 实参多于形参时不会报错(多数语言会报错);

2. 实参少于形参,并且没有或默认参数不够的情况下会报错;

3. 实参少于形参,但是默认参数可以对应的情况下不会报错;

未定参数

◇  func_get_agrs():获取函数内所有的实参,返回一个数组;

◇  func_get_agr(n):获取第 n 个参数,n 的起始下标 0;

◇  func_num_agrs():获取所有实参的长度;

function sum(){

$result=0;

foreach(func_get_args() as $i){

$result+=$i;

}

echo func_num_args()." , ";

return $result;

}

echo sum(1,23,4,32,4,2); //6, 66

echo '


';

echo sum(1,2); //2, 3

echo '


';

echo sum(123,1); //2, 124

特殊函数

可变函数:如果一个变量名后面有括号,PHP 将寻找与该变量值同名的函数,并且尝试执。"可变函数" 还可以用来实现包括回调函数、函数表在内的一些用途。

function func1($a,$b){

return $a*$b;

}

$fc="func1";

echo $fc(2,4);

匿名函数:匿名函数也叫闭包函数,允许临时创建一个没有指定名称的函数。

最经常用作回调函数 callback 参数的值。

◇  赋值形式:

$greet=function($name){

printf("Hello %s",$name);

};

$greet('World'); //hello world

$greet('PHP'); //hello PHP

◇  参数形式:

$arrs=[1,2,3,1,5,1,51,121];

$fn=call_user_func_array(function(){

$a=func_get_args();

$sum=0;

foreach ($a as $i){

$sum+=$i;

}

return $sum;

},$arrs);

echo $fn; //185

printf() 函数、及其他相关函数可 参考。

作用域

局部作用域

全局作用域

超全局作用域

静态局部作用域

作用域中的变量

/* 各自独立 */

$overall=100;

function dosomething(){

$locals=998;

echo $overall; //Undefined

}

dosomething();

echo $locals; //Undefined

————————————————————————————————————————

/* 互不影响 */

$thisOne=100;

function dosomething(){

$thisOne=1;

echo $thisOne; //1

}

dosomething();

echo $thisOne; //100

访问全局变量

使用 global 关键字:

$thisOne=100;

function dosomething(){

global $thisOne;

$thisOne++;

echo $thisOne; //100

}

dosomething();

echo $thisOne //101

使用 $GLOBALS 全局数组:

$thisOne=100;

function dosomething(){

echo $GLOBALS['thisOne']; //100

$GLOBALS['thisOne']++;

echo "


".$GLOBALS['thisOne']; //101

}

dosomething();

echo "


$thisOne"; //101

◇ 通过 $GLOBALS 数组创建全局变量:

$thisOne=100;

function dosomething(){

echo $GLOBALS['thisOne'];

$GLOBALS['thisTwo']=200;

echo $thisTwo; //Undefined 不能直接访问

echo $GLOBALS['thisTwo']; //在局部中只能通过数组键名访问

}

dosomething();

echo "


$thisTwo"; //200 成功

◇ 通过 global 创建全局变量:

function dosomething(){

global $some;

$some=9;

echo $some; //9

}

dosomething();

echo $some; //9

检测函数是否被定义: function_exists()

function testfunc(){

echo '已定义';

}

if(function_exists('testfunc')){ //true

testfunc();

}

函数的编程思想

递归思想

要解决一个复杂的问题,根据现实逻辑,可以通过多个子类问题的答案解决,而这些子类问题又可以通过多个小问题解决,以此类推...一直到最小的问题,通常都会是一个已知的数据。

function demo(){

static $i=1;

echo "$i,";

$i++;

if($i<10){

demo(); //简单讲:递归就是在调用自己

}

}

demo(); //1,2,3,4,5,6,7,8,9,

6fc083551a69

f.png

阶乘案例

//求未知数的阶乘

function factorial($n){

if($n==1){

return 1;

}

$result=factorial($n-1)*$n;

return $result;

}

echo factorial(3); //6

递推思想(迭代思想)

要解决一个复杂的问题,如果能得知最小问题的答案(通常是已知),根据算法得出上级问题的答案,以此类推一直推算到可以解决复杂问题。

递推图例

6fc083551a69

temp.png

斐波那契数列

function fibonacci($n){

$n1=1; //数列的第一个初始数,代表求值的上两个数

$n2=1; //数列的第一个初始数,代表求值的上一个数

$result=0;

for($i=3;$i<=$n;$i++){

$result=$n1+$n2;

$n1=$n2; //数据轮换

$n2=$result; //数据轮换

}

return $result;

}

echo fibonacci(3); //第3项的结果为:2

echo fibonacci(4); //第4项的结果为:3

echo fibonacci(5); //第5项的结果为:5

echo fibonacci(6); //第6项的结果为:8

▁ 递归推算规则:从大到小,再回归到大;

▁ 递推推算规则:从小到大;

▁ 在两种方法都能解决问题时,优先使用递推解决;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值