函数:将复杂的程序分解为若干模块,每个功能模块对应一个函数(过程化开发)(功能块)
/*
函数的定义:
* 1. 函数是一个被命名的
* 2.独立的代码段,独立的功能
* 3.它执行特定功能
* 4.并可以给调用它的程序返回一个值
函数的优点:
* 1. 提高程序的重用性
* 2. 提高程序的可维护性
* 3.可以提高软件的开发效率
* 4.提高软年的可靠性
* 5.控制程序的复杂性
*
*
*
函数的声明
*
* function 函数名(){
* 函数体
* }
*
* function 函数名(参数1, 参数2, 参数.... ) //参数列表,如果有多个就作用,分开
* {
* 函数体
* }
*
* function 函数名(){
*
* 函数体
* 返回值;
* }
* function 函数体(参数列表){
* 函数体
* 返回值
* }
* 一、函数必须调用才能执行
,可以在声明之前调用,也可以在函数声明之后调用
* 二、函数名命名和变量一样, aaa bbb ccc aaaBbbCcc, 函数名称一定要有意义
* 三、
函数在声明时不能重名
*
* 四、可以通过向函数传递参数,改变函数的行为
* 形参:就在声明函数时,声明的参数,参数就是变量,多个参数用,分开
* 实参: 调用 函数时传给形参数值(数据,也可以变量)
* 五、
如果没有返回值则称为过程
* 六、通过使用return 语句返回数据
* 七、函数执行到return语句就结束,所以不要在这个语句后写代码,也可以使用return结束函数的执行
*
*
* function 出差(谁, 目的地, 联系人,交通){
*
* '''''''
*
* return 出差的结果
*
* }
* 领导2=出差(张三,上海, 王五, 飞机);
* 领导4=出差(李四, 大连, 赵六, 火车);
*
* 函数名的作用:
*
* 1. 调用函数,开始执行函数
* 2. 可以向函数中传递 数据
*
3. 函数名就是返回的值
*/
echo sum(10, 5);
echo '
';
echo sum(10,5)+100;
echo '
';
$sum=sum(3, 4);
echo $sum;
function sum($x, $y){
$sum=0;
$sum=$x*$x+$y+$y;
return $sum;
}
/* PHP的变量的范围
* 局部变量: 在函数中声明的变量就是局部变量,只能在自己的函数内部使用。
* 全局变量: 在函数外声明,在变量声明以后的,直到整个脚本结束前都可以使用,包括在函数中和{}中都可使用
*
* PHP的变量分不出 是声明还是使用,
* 在PHP中使用全局变量 要通过global关键字将这个全局变量包括到函数中才能使用到,在global声明之后才是使用全局的变量
*
* 参数就是局部变量,这个局部变量可以调用 时去赋值。
*
* PHP的静态变量
*
* 静态变量只能声明在函数中(类中),不能在全局声明
* 使用static在变量前;
*
* 作用:一个变量可以在同一个函数在多次调用中同用。
* 1. 静态变量在静态代码段中保存
* 2. 一个函数多次调用之间共用,但只在第一次调用 函数时声明到内存,以后再调用用,就不再声明,而直接使用
*/
变量函数:如果一个变量后面有括号$var(),那么就会寻找与变量值同名的函数。
将函数名付给变量,通过调用变量加括号就会调用对应的函数。
类似于多态,同一个输出形式,通过变量的名字的不同可以调用不同的函数
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(1,2)."
";
注释:1、函数的功能----决定是否使用这个函数
2、函数的参数----决定函数怎么调用,几个参数,穿什么类型的值
3、函数的返回值-----调用后怎么处理这个函数
php有2000多函数,都 属于系统函数,都可以通过名称直接调用。通过扩展库来加载那个功能
一定要先使用系统函数,如果系统函数没有你想要的功能,再去自己定义函数
*
* 1. 常规函数
bool copy ( string source, string dest )
2. 带有mixed的函数 , mixed表示可以传任何类型的数据 ,变量或者值。因为是弱类型的。
bool chown ( string filename, mixed user )
3. 带有&参数的函数, 表示引用赋值, 这个参数不能传值,只能传一个变量,然后函数将变量的值改变,我们在使用这个变量时,值也是变化的
bool arsort ( array &array [, int sort_flags] )
4.默认函数 带有[]的函数, 表示这个参数是可选的,如果你传值了就使用你传的值,如果没有传值则使用默认值(实参少于形参)
直接在声明函数时,就为参数给初值。
function demo ($a=10,$b=20,$c=30)
{}
demo();
可选值和必须值, 必须从后向前设置
bool arsort ( array &array [, int sort_flags] )
5. 带有...的参数函数, ...表示可以传任意多个参数(实参多余形参)
int array_unshift ( array &array, mixed var [, mixed ...] )
实参比形参多的情况。但是函数中如果获得不了实参的值也不行。所以办法是func_get_args();函数内部都有这样一个函数,获取传递过来的实参,把他们放在一个数组里面。
function demo(){
$args=func_get_args();
//print_r($args);//参数数组
//echocount($args);//参数个数
echo (array_sum($args));
}
demo(1,2,3,4,5,6,7,8,8);
function demo(){
$args=func_get_args();
$sum=0;
for($i=0;$i
$sum+=func_get_arg($i);
}
echo $sum;
}
demo(1,2,3,4,5,6,7,8,8);
6. 回调函数 带有callback的参数, 就是调用这个函数时需要我们传一个函数进来(函数名,函数名字串)
array array_filter ( array input [, callback callback] )可以用变量函数来完成
function demo($x,$y){
return $x+$y;
}
function text($x,$y){
return $x*$x+$y*$y;
}
function sum($a,$b,$fun){//看,$fun为变量函数哦,传实参的时候要传函数名哦
return $a+$b+$fun($a,$b);
}
echo sum(1,2,demo);//结果:6
echo sum(2,3,"text");//18
/*
* 1. 内部函数: PHP可以在函数内部再声明函数
可以用面向对象方法的封装来代替
* 目的就是在函数的内部调用
* 就是用来帮助外部函数完成一些子功能的。
*
*
* 2. 递归函数: 就是在自己内部调用自己的函数名
*<?php
function demo($num){
echo $num."
";
if($num>0)
demo($num-1);
else
echo "----------
";
echo $num."
";
}
demo(10);
结果://层层调用,最后再由最内层返回到调用它的外层,继续执行外面没有执行的部分。
10
9
8
7
6
5
4
3
2
1
0
----------
0
1
2
3
4
5
6
7
8
9
10
*
* 3. 重用函数(使用自己定义的php函数库)
* 代码不要重复编写。PHP的过程化的变成就是把每个功能写在一个独立的函数库的脚本文件里。
各个文件去包含这个脚本文件,就可以使用这里面的功能函数了。
*
通常被包含的文件都命名为*.inc.php说明有多个扩展名的文件都不是直接执行的文件,而是被其他文件包含
* require: 用于静态包含
* include: 用于动态包含。不是把代码直接拷贝过来,而是php执行过的解析后的代码了,包含进来可以当做一种输出,如果包含三次,就输出三次
include "txt.txt";
include "txt.txt";
include "txt.txt";?>
require "header.inc.php";
if($className=="Action"){
include "action/".$className.".php";
}elseif($className=="Model"){
include "model/".$className.".php";
}else{
include "public/".$className.".php";
}
require "footer.inc.php";
做项目的时候都是文件相互包含的,可能2文件包含3,3包含4,而5又包含3,可能有时候一个文件不知是否包含或是包含了几次。所以,出现了once
* 但是执行效率不高
require_once
* include_once
*
* 包含任意的文件.txt .html .php
*
*
* include(文件名);//当做函数,把指定的文件包含到当前页面下使用
* include "文件名";//当做指令
*
* echo "@@@@@@@@@@@2";//当做指令
* echo("@@@@@@@@@@@@@");//当做函数
* break//系统指令
* exit;//系统指令
*
* include "config.inc.php"; * include("config.inc.php") * * 4. 一些系统函数的使用 * * * */