PHP语法(四)
包含文件
- include和require:包含多次
- include_once和require_once:包含一次
- 包含文件就相当于将包含文件中的代码拷贝粘贴到PHP页面中(魔术常量除外,魔术常量显示所在文件的文件信息),所以后缀是.html的包含文件中的PHP代码被文件包含后也是会执行的。
路径
路径分为绝对路径和相对路径
绝对路径:从盘符开始 c:\aa\bb.txt
相对路径:从当前文件所在的目录开始 aa\bb.txt ../aa.txt
../表示上一级目录 ./当前目录
区别:
./就表示在当前目录下找
不带./受include_path配置的影响
作用:将项目中的包含文件统一放置到指定目录内,然后利用include_path指向这个目录。可以提高安全性,也可以不用写很长的地址字符串。
include_path的值可以写多个路径,从前往后找文件。
set_include_path(“F:\www1;d:\www2;c:\”);
获取虚拟目录地址
文件包含
路径中“/”和“\”的区别
/:斜杠,用于web路径 http://www.php.com/aa/bb/index.html
\:反斜杠 用于文件物理地址路径 C:\aa\bb\index.html
在windows中可以相互混淆,但是在Linux中不可以,Linux中严格区分。
函数
函数是一个固定的代码块,也称为子程序,一个函数可以被多次调用,函数可以很好的实现计算机的模块化编程。
定义语法
function 函数名(参数1,参数2,…){
//函数体
}
函数的命名规则:
- 以字母、下划线开头,后面跟的是字母、数字、下划线
- 函数名不区分大小写(JS是区分大小写的)
调用函数
通过函数名来调研函数。
例题:打印斐波那契数列
参数的概念
函数括号里面的数称为参数
参数分为形式参数和实际参数
形式参数没有具体的值,只起一个形式的作用,用来告诉调用者需要传递几个参数给函数。函数定义时候的参数是形式参数
实际参数:函数调用的时候传递给函数的参数。
可变函数
将函数名保持在变量中。
<?php
function fun1() {
echo ‘处理一年级的事情<br>’;
}
function fun2() {
echo ‘处理二年级的事情<br>’;
}
function fun3() {
echo ‘处理三年级的事情<br>’;
}
function fun($grade) {
$f=’fun’.$grade; //可变函数
$f();
}
fun(1);
fun(2);
fun(3);
匿名函数
没有名字的函数,PHP5.3以后才支持的。
函数的传值与传址
默认情况下,函数参数传递是值传递,在定义函数的时候参数前面加上“&”表示地址传递。
脚下留心:如果函数的参数是引用传递,调用函数的时候不能直接写值,只能写变量,因为地址总是保存在变量中。
参数的默认值
如果参数有默认值的情况下,传递了参数就使用传递的值,没有传递参数就使用默认值。
注意事项
- 默认值必须在一个存在的值,不能用变量来代替
- 常量可以做默认值
- 在定义函数的时候,没有默认值的参数写前面,有默认值的参数写后面。
- 形参合实参不匹配
-
- 实际参数少于形式参数,报错,没有对应值的参数为null
- 实际参数少于形式参数,只取前面对应的值。
传递不确定参数
在js中通过arguments关键字来获取传递的参数。
判断函数是否存在
return
作用1:在函数中使用
- 终止函数的执行
- 从函数内部将数据返回出来
作用2:在页面中使用
第一步:创建9-config.php
<?php
return array(
‘host’=>’lolcalhost’,
‘username’=>’root’,
‘pwd’=>’root’
);
第二步:在9-demo.php页面中包含9-config.php
<?php
$config=require ‘./9-config.php’;
var_dump($config);
作用:用来做框架的配置文件。
作用3:终止脚本的执行
终止脚本的执行的方法
- return
- exit——等同于die
- die
区别:
- return只能终止当前脚本,如果包含文件中含有return,只能终止包含文件。
- exit和die用来终止所有脚本执行
- exit和die后面都能跟参数(程序中有一个潜规则,没有参数用exit,有参数用die)。
测试
- 写一个包含文件
echo ‘包含文件开始<br>’;
return;
echo ‘包含文件结束<br>’;
- 写一个测试文件
- 将return换成exit或die,运行结果
变量的作用域
- 全局变量:作用范围在函数的外部
- 局部变量:作用范围在函数内部
- 超全局变量:在整个页面访问(函数内,函数外都能访问)
在函数内部使用全局变量
方法一:使用$GLOBALS
例题:
例题一:
例题二:
方法二:使用global关键字
注意:只有变量有作用域的概念,常量没有作用域的概念
方法三:匿名函数use()
use()将匿名函数外部的变量引入到匿名函数的内部。
练习
变量的生命周期
全局变量声明的时候产生,页面执行完毕后销毁
局部变量调用函数的时候产生,函数执行完毕销毁。
静态变量程序加载的时候产生,只被初始化一次,页面执行完毕销毁
静态变量(static)
静态变量一般指的是局部静态变量,PHP中没有全局的静态变量,因为全局的静态变量就是全局变量。
![]() |
![]() |
注意:静态变量是有作用域的
递归
在函数的内部自己调用自己。
递归的要素
- 递归点:函数内部调用自己的地方
- 递归出口:递归结束
例题:用递归实现从1加到任意一个数
例题:打印前十个斐波那契数列
第n个斐波那契数等于第n-1和n-2的和
<?php
/**
*$n是第n个斐波那契数
*/
function fun($n) {
if($n==1 || $n==2) {
return 1;
}
return fun($n-1)+fun($n-2);
}
//打印前10个斐波那契数列
for($i=1;$i<=10;$i++)
echo fun($i),’ ’;
/**
*分析第四个斐波那契数
fun(4) =fun(3)+fun(2)
=fun(2)+fun(1)+1
=1+1+1
=3
*/
?>
算法:二分法查找
- 前提:一个有序的数组
- 功能:在有序的数组中查找是否存在某个数
在1,5,9,12,56,78,102数组中查找102
第一步:找出数组中间的数12,12<102,在12右边查找
第二步:剩下的数据有56,78,102,找中间的数是78,78<102,在78的右边找
第三步:剩下的数据有102,找到了。
实现代码
<?php
/**
*@param $array array 查找的数组
*@param $min int 最小下标
*@param $max int 最大下标
*@param $search number 查询的数字
*/
function binary($array,$min,$max,$search) {
while($min<=$max){
$mid=floor(($min+$max)/2); //计算中间元素的下表
if($array[$mid]==$search) //找到查找的元素
{
return $mid; //返回下标
}
elseif($array[$mid]<$search) { //查找的元素比中间值大
$min=$mid+1; //更改最小下标值
}
else {
$max=$mid-1; //更改最大下标值
}
}
return -1; //没有找到
}
$num=array(1,5,9,12,56,78,102);
echo binary($num,0,count($num)-1,8),'<br>’;
作业:
- 猴子吃桃子,第一天吃了一半又多吃一个,第二天一样,到第十天就剩下一个桃子,请问原来有几个桃子?
- 用递归实在二分法