首页> 基础笔记 >PHP基础学习 >基础语法 基础语法
PHP声明及应用各种形式的PHP函数
作者:小萝卜 2019-08-13 【 PHP 】 浏览 1238
简介常规参数的函数、伪类型参数的函数、引用参数的函数、默认参数的函数、可变个数参数的函数、回调函数
5.1 常规参数的函数
常规参数的函数格式说明:
string example(string name,int age,double height)
所谓的常规参数的函数,就是实参和形参应该个数相等、类型一致。就像C或Java等强类型型语言。
上面函数有三个参数,调用时传递的参数个数和顺序必须一致。
string chr(int $ascii) //返回指定的字符
float ceil(float $value) //进一法取整
array array_combine(array $keys,array $values)//合并一个数组
string implode(string $glue,array $pieces)
//使用常规参数传值
function test($arg) {
$arg = 200; //在函数中改变参数$a的值为200
}
$var = 100; //在父程序中声明一个全局变量$var,初值为100
test($var); //调用test函数,并将变量$var的值100传给函数的参数$arg
echo $var; //输出100。$var的值没有变化
5.2 伪类型参数的函数
伪类型参数的函数格式说明:
mixed funName(mixed $a, number $b, callback $c)
PHP是弱类型语言,不仅在声明变量时不需要指定类型,当然在声明函数时也不需要指定类型,所以在PHP中函数的每个参数,都可以为其传递任意类型的值。
三种伪类型: mixed、number 和 callback。
bool empty(mixed $var) //检查一个变量是否为空
bool usort(array &$array,callback $cmp_function)
//使用用户自定义的比较函数对数组中的值进行排序
number abs(mixed $number) //绝对值
//函数中的参数:伪类型参数
//mixed混合类型 number数值类型 callback回调函数类型
//格式化输出数据:
//格式:void out(mixed $a)
function out($a){
echo "< pre>";
var_dump($a);
echo "< /pre>";
}
out(10);
out("abc");
out([10,20,'aa']);
5.3 引用参数的函数
引用参数的函数格式说明:
void funName(array &args)
相对于按值传递模式,并不会将父程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块相对地址导入函数之中。因此当该数值在函数中有任何变动时,会连带对父程序造成影响。
注意:如果在函数的形参中使用“&“修饰的参数,在调用该函数时必须传入一个变量给这个参数,而是不能传递一个值。
function demo(&$a,$b){
$a=200; //由于a是引用类型,故参数x也会改变200
$b=300;
}
$x=20;
$y=30;
demo($x,$y);
echo $x.":".$y; //200:30
5.4 默认参数的函数
默认参数(“[ ]”中的)的函数格式说明:
mixed funName(string name [,string value [,int num]])
在php中,支持函数的默认方式调用。如果在调用函数时没有指定参数的值,在函数中会使用参数的默认值。
注意:默认参数必须列在所有没有默认值参数的后面。
//定义函数
//格式: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/>";
5.5 可变个数参数的函数
可变个数参数的函数格式说明:
mixed funName(string arg1 [,string ...] )
通常用户定义函数时,设置的参数数量是有限的。如果希望函数可以接受任意数量的参数,需使用以下函数:
func_get_args() //返回一个数组,包含所有参数
func_num_args() //返回参数总数
func_get_arg() //接收一个数字参数,返回指定参数
//5.可变个数的参数函数:
//func_get_args();//以数组的方式返回所有的参数信息
//func_get_arg($index) //获取指定参数位置(index:从0开始的整数)的信息
//func_num_args()//获取参数的个数。
//定义函数
//格式:number add(number $a[,number $a[,...]]);
function add(){
$m=func_num_arg(); //获取参数的个数
//遍历所有参数
$sum=0;
for($i=0;$i<$m;$i++){
$sum += func_get_arg($i); //累加每次获取的参数值
}
return $sum; //返回结果
}
//使用
echo add(10)."< br/>";
echo add(10,20)."< br/>";
echo add(10,20,30,10,20,30,10,20,30)."< br/>";
//可变函数,就是调用函数时使用的是变量名。
function one(){
echo "one.....< br/>";
}
function two(){
echo "two.....< br/>";
}
//测试:变量name的值决定调用的是哪个函数。
$name="one";
$name(); //调用函数
$name="two";
$name();
5.6 回调函数
回调函数格式说明:
mixed funName(callback arg)
所谓回调函数,就是指调用函数时并不是传递一个标准的变量作为参数,而是将另一函数作为参数传递到调用的函数中。
1.变量函数
2.使用变量函数声明和应用的回调函数
3.借助call_user_func_array()函数自定义回调函数
4.类静态函数和对象的方法回调
//回调函数的实例:
//定义一个使用函数的函数,就是要求参数是一个函数
function demo($a){
echo "aaaaa< br/>";
$a();
echo "aaaaa< br/>";
}
//测试:(使用demo函数是必须传入函数名,故称回调函数参数)
//demo("one"); //传入one,则one函数被调用
demo("two"); //传入two,则two函数被调用
//demo("aa");
function one(){
echo "one.....< br/>";
}
function two(){
echo "two.....< br/>";
}
5.6.1 变量函数
/** 声明第一个函数one, 计算两个数的和
@param int $a 计算和的第一个运算元
@param int $b 计算和的第二个运算元
@return int 返回计算后的结果
*/
function one( $a, $b ) {
return $a + $b;
}
/** 声明第二个函数two, 计算两个数的平方和
*/
function two($a, $b) {
return $a*$b + $b*$b;
}
$result = "one"; //将函数名"one"赋给变量$result, 执行$result()时则调用函数one()
//$result = "two"; //将函数名"two"赋给变量$result, 执行$result()时则调用函数two()
echo “运算结果是:”.$result(2, 3); //变量$result的函数名值,就调用哪个函数
5.6.2 使用变量函数声明和应用的回调函数
// 声明回调函数filter, 在0-100的整数中通过自定义条件过滤不要的数字
function filter( $fun ) {
for($i=0; $i <= 100; $i++) {
//将参数变量$fun加上一个圆插号$fun(), 则为调用和变量$fun值同名的函数
if( $fun($i) )
continue;
echo $i.'< br>';
}
}
//声明一个函数one, 如果参数是3的倍数就返回true, 否则返回false
function one($num) {
return $num%3 == 0;
}
// 声明一个函数two, 如果参数是一个回文数(翻转后还等于自己的数)返回true, 否则返回false
function two($num) {
return $num == strrev($num);
}
filter("one"); //打印出100以内非3的倍数,参数"one"是函数one()的名称字符串,是一个回调
echo '--------------------< br>';
filter('two'); //打印出100以内非回文数,参数"two"是函数two()的名称字符串,是一个回调
5.6.3 借助call_user_func_array()函数自定义回调函数
/** 声明一个函数fun(), 功能只输出两个字符串,目的是作为call_user_func_array()回调参数
@param string $msg1 需要传递一个字符串作为参数
@param string $msg2 需要传递另一个字符串作为参数
*/
function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '< br>';
echo '$msg2 = '.$msg2;
}
/** 通过系统函数call_user_func_array() 调用函数fun()
第一个参数为函数fun()的名称字符串
第二个参数则是一个数组,每个元素值会按顺序传递给调用的fun()函数参数列表中
*/
call_user_func_array('fun', array('博客', '萝卜网络博客'));
5.6.4 类静态函数和对象的方法回调
/* 声明一个类Demo,类中声明一个静态的成员方法fun() */
class Demo {
static function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '
';
echo '$msg2 = '.$msg2;
}
}
/* 声明一个类Test, 类中声明一个普通的成员方法fun() */
class Test {
function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '
';
echo '$msg2 = '.$msg2;
}
}
call_user_func_array( array("Demo", 'fun'), array('博客', '萝卜网络博客') );
call_user_func_array( array(new Test(), 'fun'), array('BroPHP', '学习型PHP框架') );
很赞哦! (0)
上一篇:PHP的匿名函数的定义与使用
下一篇:PHP变量的范围