函数是一门程序中不可少的一个重要的东西,很多东西我们会做成函数这样可以方便重复调用了,下面本文章重点就是介绍函数php函数用法.
一、函数的声明
1、语法结构,代码如下:
- function 函数名 (参数列表)
- {
- 函数体; //可选
- 返回值; //return可选
- }
参数列表用逗号隔开,勿遗漏$变量符号,函数名不区分大小写,规则与变量一致,函数调用才执行,可先调用后声明,函数名不能重名,包括系统函数.
2、函数调用,代码如下:
- function sum($x,$y) //形参:在声明函数时声明的参数
- {
- // $x = 1; //如果在函数内对参数赋值,则会覆盖实参。
- // $y = 2; //开源软件:Vevb.com
- $sum = 0;
- $sum = $x + $y;
- return $sum; //执行到return函数结束,后面不再执行
- }
- sum();
- sum(2,2); //实参:在调用函数时传递给形参的数值
- echo sum(2,2); //通过return返回数据可作为值使用
二、函数中的变量
1、变量范围
局部变量:函数内部声明与使用的变量
全局变量:在函数外声明,脚本任何地方均可以使用
Tips:在PHP函数中使用全局变量,要通过global关键字将这个全局变量包含到函数中才能使用,代码如下:
- $a = 1;
- $b = 2;
- function demo($a = '')
- {
- //global 须放在前面
- //global $a,$b global 可包含多个全局变量
- //$GLOBALS['a'] //声明全局变量 方法二
- global $a;
- $a += 5;
- echo $a;
- }
- demo();
2、PHP静态变量
静态变量可以在同一个函数中多次调用中共用,静态变量只能在函数或类中声明,不能在全局声明,代码如下:
- function demo($a = '')
- {
- static $a = 0; //定义静态变量
- $a++;
- echo "$a <br>";
- }
- demo(); //输出1
- demo(); //输出2
3、变量函数,代码如下:
- $var = 'hello'; //变量名后面右括号,就寻找与变量值同名的函数
- $var(); //等价于 hello();
三、函数分类及声明
1、函数分类,代码如下:
- //常规函数
- bool copy(string source,string dest)
- //带mixed,表示可以传任何类型的数据
- bool chown(string filename,mixed user)
- //带&参数的函数,这个参数只能是变量,变量值是动态的
- //对数组进行排序,数组的索引保持和单元的关联
- bool arsort ( array &$array [, int $sort_flags ] )
- $fruits = array('a', 'c', 'b');
- arsort($fruits);
- var_dump($fruits);
- //默认函数,即带[]中括号的函数,表示参数可选,若没有传值则使用默认值
- //如果调用没有赋值,又没有初值则出现警告
- function demo($a=1,$b=2)
- {
- #code
- }
- demo();
- //带有...参数的函数,表示可以传任意多个参数
- //在数组开头插入一个或多个单元
- int array_unshift ( array &$array , mixed $var [, mixed $... ] )
2、声明多个参数函数,代码如下:
- function Test()
- {
- echo func_num_args();
- }
- Test('a','b','c'); // 3
- func_get_arg():返回参数列表中的第N个参数
- function Test()
- {
- echo func_get_arg('1');
- }
- Test('a','b','c'); //b
- //使用实例:
- function cls_mysql()
- {
- $mysql = func_get_args();
- $conn = mysql_connect($mysql['0'], $mysql['1'], $mysql['2']);
- }
- cls_mysql('localhost:3306', 'root', '123456');
3、函数注释规范,代码如下:
- /**
- * 用用演示函数 //函数功能,决定是否使用
- *
- * @static
- * @access public
- * @param string $attributeName 属性名称 //函数参数,决定怎样调用
- * @return string //函数的返回值,决定调用后怎么处理
- */
- public function demo($attributeName)
- {
- $attributeName = 'abc';
- return $attributeName
- }
四、Callback 回调函数
我们自定义一个函数A,但是我们不直接去调函数A,而是在函数B中去调用函数A,函数B通过接收函数A的名字和参数来实现对函数A的调用,函数A称为回调函数,代码如下:
- function A($x,$y)
- {
- return $x*$y;
- }
- function B($a,$b,$fun)
- {
- return $a+$b+$fun($a,$b);
- }
- echo B(2,3,"A");
PHP回调函数的实现方法
php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持,代码如下:
- //mixed call_user_func_array 以数组的形式接收回调函数的参数
- mixed call_user_func_array ( callable $callback , array $param_arr )
- call_user_func_array('f1',array('A','B'));
- //call_user_func的参数个数根据回调函数的参数来确定
- mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
- call_user_func_array('f1','A','B');
实例代码如下:
- //普通全局函数
- function f1($arg1,$arg2)
- {
- echo $arg1."<br>".$arg2."<br>";
- }
- echo "通过call_user_func_array调用函数f1:<br>";
- call_user_func_array('f1',array('A','B'));
- echo "通过call_user_func调用函数f1:<br>";
- call_user_func('f1','C','D');
- //类
- class myClass
- {
- public $name;
- function show($arg1)
- {
- echo '参数名:'.$arg1."<br>";
- echo '对象中的成员名:'.$this->name;
- echo "<br>";
- }
- function show1($arg1,$arg2)
- {
- echo $arg1."<br>".$arg2."<br>";
- }
- public static function show2($arg1,$arg2)
- {
- echo $arg1."<br>".$arg2."<br>";
- }
- }
- echo "调用类中非静态成员函数,该成员函数中有this调用了对象中的成员:<br>";
- $a = new myClass;
- $a->name = 'F';
- call_user_func_array(array($a,'show'),array('E'));
- echo "调用类中非静态成员函数,该函数没有调用对象中的成员,没有this:<br>";
- call_user_func_array(array('myClass','show1'),array('G','H'));
- echo "调用类中静态成员函数:<br>";
- call_user_func_array(array('myClass','show2'),array('I','J'));
五、内部函数
在函数内部再声明函数,目的是在函数内部调用,用来帮助外部函数完成一些子功能.
新闻热点
疑难解答