一、函数的声明
1、语法结构
function 函数名 (参数列表)
{
函数体; //可选
返回值; //return可选
}
- 参数列表用逗号隔开,勿遗漏$变量符号
- 函数名不区分大小写,规则与变量一致
- 函数调用才执行,可先调用后声明
- 函数名不能重名,包括系统函数
2、函数调用
function sum($x,$y) //形参:在声明函数时声明的参数
{
// $x = 1; //如果在函数内对参数赋值,则会覆盖实参。
// $y = 2;
$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\'));
五、内部函数
在函数内部再声明函数,目的是在函数内部调用,用来帮助外部函数完成一些子功能
继续阅读与本文标签相同的文章
下一篇 :
jquery 实现的复选框全选与反选
-
手机信号突然从“4G”变成“E”,是什么意思?客服给出答案
2026-05-14栏目: 教程
-
互联网架起“乌镇式生活”
2026-05-14栏目: 教程
-
微信才是内存“杀手”,别再乱清理,关闭这个功能,手机立马流畅
2026-05-14栏目: 教程
-
手机信号变成E是什么意思?看完专业人士给出的解释后,涨知识了
2026-05-14栏目: 教程
-
关于Word的四个隐藏办公小技巧,你可能一个也不知道,建议收藏!
2026-05-14栏目: 教程
