function 函数名 ([arg1][,arg2][,arg3]...[,arg4]) {
代码段
return 返回值;
}
函数可以没有返回值
也可以有一个返回值
不可能有多个(单独)返回值
函数名命名与变量,常量命名规范相同.
函数名不区分大小写,面向对象里, 方法(理解成函数),也不区分大小写.。
函数名必须是唯一的,即函数名不能和已经存在的函数重名。
声明函数时,的参数---> 叫形式上的参数, 形参
调用函数时,的参数---> 叫实际传递的参数,实参.
说白了:
形参在函数体内提供?? -->变量名
实参在函数体内提供?? -->值
如果实参少于形参,没对应上,warning警告,并尽量往下执行.
如果实参多于形参,后面多出来的实参,将会被舍弃掉. 没有其他副作用.
如果参数有默认值的话,要把该参数,写到最后面,若在前面,对应位置留空会报错
如果某个有默认值的形参,对应位置传了实参
那么,实参的值 将要覆盖 默认值.
作用域 js 会往外层找,php不会
当函数语句运行完之后,执行权就交回.
或者是碰到 return 之后,函数也会交回执行权.
没有return 或者 return; $s=xxx();echo $s; 结果null;
return不能返回多个单独的值。复合值除外。
/*
function t3() {
return 3,9; // 语法错误
}
*/
动态函数
即 函数的名字 可以用变量来表示.同样适合于类名
$func();
php中引用的用法:
1. 变量的引用赋值: $a = &$b
2. 函数调用时的引用参数传递
1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_reference来开启.
3. 函数返回引用类型, 这种应用方式需要声明函数时, 在函数名前增加&符号, 并且, 在调用时, 要用引用赋值方式, 比如:
function &func() { return $a; } $a = func(); //这种调用方式得到的不是引用传值 $a =& func(); //这样调用才是引用传值
$a = 1; function &func(&$a) { return $a; } $b = func($a); $c =& func($a); $b = 2; echo "a: $a, b: $b, c: $c. <br />/n"; //输出a: 1, b: 2, c: 1. //可见对$b的修改不会影响$a $c = 3; echo "a: $a, b: $b, c: $c. <br />/n"; //输出a: 3, b: 2, c: 3. //可见对$c的修改会影响$a
错误
$age = 19; function foo($num) { $num = &$age; $num += 5; } foo(1); echo $age;
引用传参请用function foo(&$num)
超级全局变量:
$_GET //地址栏传参的集合
$_POST //post方式传递来的参数集合
$_COOKIE
$_REQUEST // GET POST COOKIE的集合
$_FILES //文件上传
$_ENV //php服务器环境
$_SESSION //用户登录
$GLOBALS //全局变量的注册表,访客的一些信息 能找到声明过的所有页面变量
$_SERVER //服务器参数
global关键字,用在变量名前,声明:这个变量用的是"变局范围"内的$age 而不要在局部内生成$age
1: 通过引用传参,能影响全局变量
2: 通过global声明, 也能直接使用外部的变量 (不推荐,好多公司明确禁止使用global,自己想想危害)
3: 直接操作超级变局变量.
bool function_exists(string function name)
$GLOBALS['var1'] = 5; var1就 == 5了
我们通过$GLOBALS可以操作普通的全局变量.