PHP之路 PHP基础【第三篇】函数
函数的定义和使用
自定义函数语法格式: function 函数名称([参数1 [,参数2 [,…]]]){ 程序内容叙述(也叫函数体); [return 返回值;] //如需函数有返回值时使用 } 函数的使用: 函数名称([参数1 [,参数2 [,…]]]);
<?php //函数的定义和使用 //函数调用,并传参数8过去, myout(8); //函数使用和定义是不分先后顺序的。 //函数定义(根据参数m的值输出对应行的aaaaa输出) function myout($m){ for($i=1;$i<=$m;$i++){ echo "{$i}.aaaaaa<br/>"; } }
变量的作用域
全局变量
<?php header("Content-Type: text/html;charset=utf-8"); //变量的作用域:由于函数的出现导致了变量的作用域不同。 //分为:全局和局部变量,静态变量。 //1. 全局变量:就是在函数外定义的变量,特点是在函数内外都可以使用,但是函数内用时需要使用global关键字声明一下。 $name="mr"; //全局变量 function fun(){ global $name; //声明一下使用全局变量 echo "函数内变量输出:".$name."<br/>"; $name="lisi"; } fun(); echo "函数外变量输出:".$name."<br/>";
局部变量
<?php header("Content-Type: text/html;charset=utf-8"); //变量的作用域:由于函数的出现导致了变量的作用域不同。 //分为:全局和局部变量,静态变量。 //2. 局部变量:就是在函数内声明的变量,特点是生命周期只在函数内有效。 function fun(){ $name="zhangsan"; //局部变量 echo "函数内变量输出:".$name."<br/>"; } fun(); echo "函数外变量输出:".$name."<br/>";变量输出:".$name."<br/>";
静态变量
用的少
<?php //变量的作用域:由于函数的出现导致了变量的作用域不同。 //分为:全局和局部变量,静态变量。 //3. 静态变量:是在函数内使用static关键字定义的变量。 // 特点:初始化语句只执行一次,多次调用此函,静态变量依然有效。 function fun(){ static $m=0; //静态变量的初始化语句只执行一次。 $m++; echo $m."<br/>"; } fun(); fun(); fun(); fun();
函数参数
<?php //php函数中各种参数的定义和使用 //1.按函数的参数类型不同分为:常规(普通)参数、伪类型参数、回调函数参数(属于伪类型的一种) //2.按函数的参数使用方式分为:常规(普通)参数、引用参数、默认值参数和可变参数。 //1.如字串截取函数:string substr(string $string,int $start[,int $length]) //上面函数中参数类型都是php8种类中的一种,故称为常规参数函数。 //按照参数方式,前两个为普通参数 ,最后一个为默认参数 //2。如数组排序函数:bool sort ( array &$array [, int $sort_flags ] ) //其中第一个参数带&符称为引用参数,第二个为具有默认值的默认参数 //3. 自定义数组排序函数:bool usort ( array &$array , callback $cmp_function ) //其中第一个参数带&称为引用参数,第二参数要求传入的是一个函数名,称回调函数参数(属于伪类型参数) //4. 如数组合并函数:array array_merge ( array $array1 [, array $array2 [, array $... ]] ) //上面的函数中参数的个数不受限制的函数称可变参数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //1. 常规参数的函数 //定义一个求累加值的函数 //格式: int sum(int $m); function sum($m){ $sum=0; for($i=0;$i<=$m;$i++){ $sum+=$i; //累加每次循环的i值 } return $sum; //返回累加的结果 } //测试: echo "10的累加值:".sum(10)."<br/>"; echo "50的累加值:".sum(50)."<br/>"; echo "100的累加值:".sum(100)."<br/>";
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //2.伪类型参数的函数 //自定义一个求和函数 //格式:number add(number $a,number $b); function add($a,$b){ return $a+$b; } echo "10和20的和:".add(10,20)."<br/>"; //可以使用整数类型 echo "8.6和20.7的和:".add(8.6,20.7)."<br/>"; //可以使用浮点类型。 echo "<hr/>"; //gettype()函数的参数就是mixed表示任意类型的伪类型 echo "10的类型:".gettype(10)."<br/>"; echo "10.8的类型:".gettype(10.8)."<br/>"; echo "abc的类型:".gettype('abc')."<br/>"; echo "true的类型:".gettype(true)."<br/>"; echo "[10,20]的类型:".gettype([10,20])."<br/>";
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //3. 引用参数类型: //第二个参数带&的表示引用参数。 function fun($a,&$b){ $a=100; $b=200; } $x=10; $y=20; fun($x,$y); //此处调用第一个参数属于普通传值,第二个属于引用传值 //上面第二参数属于引用传值 echo "调用函数后:".$x.":".$y."<br/>"; //输出结果:调用函数后:10:200
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //4. 默认值参数 //定义一个求和函数(其中默认值必须从右侧开始) //格式:number add(number $a[,number $b[,number $c]]); function add($a,$b=0,$c=0){ return $a+$b+$c; } //调用时,参数可以从一个到三个不等 echo add(10)."<br/>"; echo add(10,20)."<br/>"; echo add(10,20,30)."<br/>";
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //5.可变参数的函数 /* func_get_args();//以数组的方式返回所有的参数信息 func_get_arg($index) //获取指定参数位置(index:从0开始的整数)的信息 func_num_args()//获取参数的个数。 */ //定义函数时没有参数要求,但是调用时参数任意 function add(){ echo "本次函数调用时的参数个数:".func_num_args()."<br/>"; $m=func_num_args(); //获取参数个数 $sum=0; //遍历每个参数 for($i=0;$i<$m;$i++){ $sum+=func_get_arg($i); //获取每个参数,并累加到sum中 } return $sum; } //调用函数: echo add(10,20,30,40,50,60,70);
匿名函数
<?php $greet = function($name){ printf("Hello %s\r\n", $name); }; $greet('World'); $greet('PHP') ?>
回调函数
<?php //call_user_func_array函数的使用 //自定义一个求和函数 function add($a,$b=0){ return $a+$b; } //使用函数 echo add(10,20); //下面的使用等价于上面的调用 echo call_user_func_array("add",array(10,20)); //使用call_user_func_array系统函数帮我们调用add函数,并将10和20 作为参数传入。
自定义函数库
通过重复使用已有的代码,提高开发效率,降低成本
include()与require()函数 几乎等价,区别在于在脚本执行时包含,当处理失败时,include( )产生一个警告而require( )则导致一个致命错误。 include_once()和require_once()函数 两个函数在脚本执行期间包括并运行指定文件。与include( )语句及require( )类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括,只会包括一次。这两个函数应该用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //自定义函数库文件 /** *使用递归实现数值的累加 *@param int $m 被求累加的值 *@return int 返回累加结果 */ function sum($m){ if($m==1){ return 1; } return $m+sum($m-1); } //自定义一个求和函数 function add($a,$b=0){ return $a+$b; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //使用自定义函数库 //include("functions.php"); require("functions.php"); //导入函数库 echo sum(99);
系统函数库
数学
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); $x = 2.7; $y = 3.01; echo floor($x) , '<br/><br/>'; echo ceil($y) , '<br/><br/>'; //假设记录数为X,每页显示Y条记录,求总页数z? //z = ceil(X/Y);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); echo fmod(7.8,3) , '<br/>'; echo 7.8 % 3 ; //整数余数的操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); $x = 6; $y = 3.2; $z = 1; echo max($x,$y,$z) , '<br/><br/>'; echo min($x,$y,$z) , '<br/><br/>';
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); $x = 7896.827; echo number_format($x) , '<br/><br/>'; echo number_format($x,2) , '<br/><br/>';
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); echo pow(2,3) , '<br/><br/>'; echo sqrt(4) , '<br/><br/>'; echo sqrt(3) , '<br/><br/>';
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); echo rand(50,80) , '<br/><br/>'; echo mt_rand(10,99) , '<br/><br/>'; $chars = 'abcdefghijlmnopqrstuvwxyz789654321'; $len = strlen($chars); for($i=0;$i<4;$i++){ $char .= substr($chars,mt_rand(0,$len-1),1); } echo $char;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); date_default_timezone_set('Asia/shanghai'); // echo '当前日期:' , date('Y-m-d') , '<br/><br/>'; // echo '上一个月的日期' , date('Y-m-d', strtotime('1 month')) , '<br/><br/>'; // echo '上一个月的日期' , date('Y-m-d H:i:s',strtotime('last day of -1 month')) , '<br/><br/>'; // echo '上一个月的日期' , date('Y-m-d H:i:s', strtotime("midnight last day of -1 month")) , '<br/><br/>'; // echo 'yesterday' , date('Y-m-d H:i:s',strtotime('yesterday')) , '<br/><br/>'; // echo 'now' , date('Y-m-d H:i:s',strtotime('now')) , '<br/><br/>';
日期和时间
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); // date_default_timezone_set('Asia/Shanghai'); echo date('Y年m月d日H:i:s') , '<br/>'; //2020年05月18日13:37:11 echo date_default_timezone_get(); //UTC
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); echo '三个星期之间的时间戳是:' , strtotime('-3 weeks') , '<br/><br/>'; echo (time() - strtotime('-3 weeks'))/86400 , '<br/><br/>'; //获取上一个月的日期 echo date('Y-m-d H:i:s',strtotime('-1 month')) , '<br/>'; echo date('Y-m-d H:i:s',strtotime('first day of -1 month')) , '<br/>';
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); echo time() , '<br/><br/>'; echo '当前的日期时间是:' , date('Y-m-d H:i:s') , '<br/>'; echo '昨天的日期时间是:' , date('Y-m-d H:i:s',time()-86400) , '<br/>'; //24*60*60
谢谢