1、函数的声明
<?php
/**
* function 函数名(参数1, 参数2.... ){
* 函数体;
* 返回值;
* }
*/
$sum = sum(3, 4);
echo $sum;
function sum($x, $y){
$sum = 0;
$sum = $x * $x + $y + $y;
return $sum;
}
?>
2、变量的范围
局部变量: 在函数中声明的变量就是局部变量, 只能在自己的函数内部使用。
全局变量: 在函数外声明的变量就是全局变量, 在变量声明以后直到整个脚本结束前都可以使用, 包括在函数中和 { } 中都可使用。
2.1 知识点: 我们无法分辨出PHP的变量是声明还是使用
<?php
$a = 10;
function demo($a){
$a += 10;
echo $a . '<br>';
}
demo($a);
echo $a;
// 结果: 20, 10
// PHP的变量分不出 $a 是声明还是使用
?>
2.2 知识点: 函数中使用全局变量必须使用global关键字, 在声明global之后的变量才是全局的变量
<?php
$a = 10;
function demo() {
global $a;
$a += 10;
echo $a . " demo <br>";
}
function test() {
global $a;
$a += 5;
echo $a . "test <br>";
}
echo $a . " ----<br>"; // 10 ----
demo(); // 20 demo
echo $a . " !!!!<br>"; // 20 !!!!
demo(); // 30 demo
echo $a . " @@@@<br>"; // 30 @@@@
test(); // 35 test
echo $a . " ####<br>"; // 35 ####
?>
静态变量: 只能声明在函数中(类中), 不能在全局声明, 变量前使用static关键字修饰。
2.3 知识点: 静态变量在静态代码块中存储, 它的值可以一个函数多次调用之间共享, 但只在第一次调用函数时声明到内存
以后再调用时就不再声明而直接使用(和Java类似)。
<?php
function test(){
static $a = 0;
$a++;
echo $a."<br>";
}
test(); // 1
test(); // 2
test(); // 3
?>
3、变量函数
其实这个和JS又很类似, 例如: 定义$var = hello, 下次使用$var()时就将寻找与变量值同名的函数hello()
<?php
function one($a, $b){
return $a + $b;
}
function two($a, $b){
return $a * $a + $b * $b;
}
function three($a, $b){
return $a * $a * $a + $b * $b * $b;
}
//$var = one;
//$var = "two";
$var = three;
echo "结果:".$var(3, 4)."<br>"; // 91
?>
4、系统函数
4.1 常规函数bool copy (string source, string dest)
4.2 带有mixed, mixed表示可以传任何类型的数据
bool chown (string filename, mixed user)
4.3 带有&参数的函数, 表示引用赋值, 这个参数不能传值, 只能传一个变量,然后函数将变量的值改变,
我们在使用这个变量时,值也是变化的(和Java中传引用又是一样的)
bool arsort (array &array [, int sort_flags])<?php
$arr=array(1, 9, 5, 8, 3, 4);
sort($arr);
print_r($arr);
?>
4.4 默认函数, 带有[]的函数, 表示这个参数是可选的,如果你传值了就使用你传的值,如果没有传值则使用默认值bool arsort (array &array [, int sort_flags])
<?php
function demo($a=1, $b=20, $c){
echo "### $a ### $b ### $c ###<br>";
}
demo(8,9);
?>
4.5 带有...的参数函数, ...表示可以传任意多个参数int array_unshift (array &array, mixed var [, mixed ...])
<?php
function demo(){
$sum = 0;
for($i = 0; $i < func_num_args(); $i++){
$sum += func_get_arg($i);
}
return $sum;
}
echo demo(1, 2, 3, 4, 5, 6, 7, 8, 9);
?>
4.6 回调函数 带有callback, 就是调用这个函数时需要我们传一个函数进来(函数名,函数名字串)
array array_filter (array input [, callback callback])
<?php
function demo($n){
if($n % 2== 0){
return true;
}else{
return false;
}
}
$a = array(1, 2, -3, 4, -5, 6, -7, 8, 9);
print_r(array_filter($a, demo)); // Array ( [1] => 2 [3] => 4 [5] => 6 [7] => 8 )
?>
5、内部函数
php可以在函数内部再声明函数, 目的就是在函数的内部调用以帮助外部函数完成一些子功能.
<?php
function score($php, $java) {
function php($php) {
if ($php > 60)
return "及格";
else
return "不及格";
}
function java($java) {
if ($java > 60)
return "及格";
else
return "不及格";
}
$total = $php + $java . "分";
$agv = $total / 2 . "分";
echo "你的php成绩是 {$php} 分, " . php($php) . "<br>"; // 调用内部函数 php()
echo "你的java成绩是 {$java} 分, " . java($java) . "<br>"; // 调用内部函数 java()
echo "你的总分是: {$total} <br>";
echo "你的平均分是:{$agv} <br>";
}
score(50, 90);
?>
6、递归函数
所谓的递归函数就是在自己的内部调用自己的函数
<?php
function demo($num){
echo $num."<br>";
if($num > 0){
demo($num - 1); // 自己调用自己
}else{
echo "--------------------<br>";
}
echo $num."<br>";
}
demo(3);
/*
3
2
1
0
--------------------
0
1
2
3
*/
?>
7、重用函数
所谓的重用函数其实就是把php, html, txt等文件或者其他文件include进来
require: 用于静态包含(如文件头, 文件尾等固定的东西)
include: 用于动态包含(不确定的文件名)
require_once: (只包含一次, 不存在函数名冲突问题, 但性能没require高)
include_once: (同上)
使用方法: include "config.inc.php"; include("config.inc.php")
<?php
include_once "test.inc.php";
echo $a."<br>";
test();
/*
10
##############
*/
?>
test.inc.php
<?php
$a=10;
function test(){
echo "##############<br>";
}
?>