php学习笔记-P1-2PHP基础-3
一、文件包含
文件包含:在php脚本中,将另外一个脚本的内容引入进来,分工协作完成一个任务:
- 向上包含(索要):使用被包含文件的代码,实现代码共享
- 向下包含(给予):自己的代码可被使用
文件包含的4种方式:
include:包含并执行文件,失败时产生警告(E_WARNING),脚本继续执行include_once:与include相同,确保只包含过一次require:包含并执行文件,失败时触发致命错误(E_COMPILE_ERROR),脚本立即终止require_once:与require相同,确保只包含过一次
二、文件包含原理
php代码执行流程
- 读取代码文件(php程序)
- 编译:将php代码转换成字节码(生成opcode)
- zendengine解析opcode,按照字节码去进行逻辑运算
- 转换成对应的html代码
文件加载原理:
- php遇到
include、require代码时,会自动执行加载 - 相当于将被包含文件中的代码嵌入到加载代码所在的位置
- 被包含的文件是单独编译的
php文件在编译的过程中如果出现了语法错误,会失败并停止执行;如果是被包含文件有错误,包含关键字是
include时才会报错- php遇到
三、include与require区别
include/require和include_once/require_once的区别
- include/require遇到一次执行一次,include_once/require_once只执行一次
include和require的区别
- 被包含文件报错,include产生警告(E_WARNING),脚本继续执行;require触发致命错误(E_COMPILE_ERROR),脚本立即终止
四、文件加载路径
分类
绝对路径:
从磁盘根目录开始(本地绝对路径):
- windows:盘符:/路径/php文件
- linux:/路径/php文件
- 从网站根目录开始(网站绝对路径)
相对于主机名字的路径:localhost/index.php=>E:/server/apache/htdocs/index.php
相对路径:
.:当前文件夹..:上级目录
区别
- 绝对路径效率偏低,但相对安全
- 相对路径效率偏高,但容易出错
五、文件嵌套包含
- 含义:一个文件包含另外一个文件,同时被包含的文件又包含了其他文件
- 容易出现相对路径出错的问题:相对路径(
.,..)会发生变化
六、函数
- 函数:将实现某一功能的代码块(多行代码)封装到一个结构中,重复利用(复用)
- 关键点:function关键字,函数名,参数(形参,实参),函数体,返回值
语法:
function 函数名([参数]){ // 函数体 // 返回值:return 结果; }- 目的:代码复用,一个功能一个函数
- 调用:
函数名([参数]),函数遇到调用时才会执行,编译时不会执行 执行分析(先编译后执行):
- 读取代码进入到代码段(编译:将代码编程二进制存储到内存)
- 根据代码逐行执行
- 命名规范:由字母、数字和下划线组成,但不能以数字开头
通用规则:
- 驼峰法:
getResoult - 下划线法:
get_resoult
- 驼峰法:
- 在一个脚本周期中,不允许出现同名函数
七、函数形参实参
参数分类
- 形参:形式参数,不具有实际意义,仅在函数定义的时候使用
- 实参:实际参数,具有实际意义,在函数调用时使用,必须是有值的表达式
形参是实参的载体,实参给形参赋值,然后参与到函数运算中
注意:
- php中允许实参多于形参,多余的函数不会使用
- php中形参个数没有限制,开发中一般不会太多
- 形参允许有默认值,有默认值的形参排在后面
- 实参个数不能少于无默认值的形参个数
八、函数形参的默认值
- 默认值:default value,函数定义的时候,给形参的初始赋值,如果实际调用的时候没有提供,就会用默认值进行计算
注意:
- 有默认值的参数,可以不传入
- 有默认值的参数可以有多个,必须放在最右边
- 形参和外部变量无关,名称冲突(同名)不影响程序运行
九、引用传值
传值方式:
- 值传递:形参和实参独立,形参改变不影响实参
- 引用传递:形参和实参是同一个值,形参改变,实参跟着改变 => 实现在函数内部修改外部参数的功能
- 语法:
&参数 - 注意:引用传值,函数调用的时候必须传入变量,不能是值和表达式
十、函数体
- 函数体:函数内部(花括号中间)的所有代码
- 返回值:将函数计算的结果通过
return关键字返回给函数调用处,当作值直接使用 注意:
- 函数返回值可以是任意数据类型
return关键字直接结束函数return关键字在文件中代表终止后面的代码执行,返回值在文件包含的位置可以接收使用
十一、作用域(上)
- 作用域:变量/常量能够被范围的区域
分类:
- 全局变量:普通定义的变量(函数外部定义),函数内部不可访问,周期:脚本执行完毕,
$GLOBALS - 局部变量:函数内部定义,当前函数内部使用,周期:函数执行结束
- 超全局变量:系统定义的变量(预定义变量:$_SERVER,$_POST等),没有访问限制,周期:脚本执行完毕
- 全局变量:普通定义的变量(函数外部定义),函数内部不可访问,周期:脚本执行完毕,
注意:
- 超全局变量会自动将全局变量纳入
$GLOBALS中
- 超全局变量会自动将全局变量纳入
十二、作用域(下)
函数内部使用外部数据:
- 通过
$GLOBALS变量 - 参数(值传递,引用传递)
- 使用
global关键字
- 通过
局部和全局变量互通:
global关键字定义变量:- 变量在外部存在,直接指向外部变量
- 变量在外部不存在,新增一个全局变量
global关键字的本质是:同一个变量名使用同一块内存区域存储数据
十三、静态变量
- 静态变量:
static关键字定义的变量,实现跨函数(同一个函数被多次调用)共享数据 语法:
function 函数名([参数]){ static 变量名 = 值; //通常定义的时候就直接赋值 }- 原理:编译的时候会对static这一行进行初始化(为静态变量赋值),函数调用的时候会自动跳过static这一行
应用:
- 统计函数的调用次数
- 使函数多次调用得到不同的结果(递归思想)
十四、可变函数
- 可变函数:变量保存的值是一个函数的名称,可以使用
变量名()的方式调用函数
十五、匿名函数
- 匿名函数:没有名字的函数
语法:
变量名 = function(){ 函数体; }- 调用:
变量名() 闭包:函数内部有局部变量,在函数执行后没有释放,因为函数内部含有对应的函数(匿名函数)在引用
function display(){ $num = 1; $func = function() use($num){ return $num; $num++; // 没有生效 }; return $func; } $func2 = display(); echo $func2(); echo $func2(); echo $func2();
十六、伪类型
- 伪类型:php不存在的类型,方便程序员查看操作手册
分类:
Mixed:混合,多种数据类型Number:任意数值类型(整形和浮点型)
评论已关闭