【PHP】04 基础 P3
文件包含
文件包含:在一个PHP脚本中,去将另外一个文件(PHP)包含进来,去合作完成一件事情。
文件包含的作用
文件包含的意义:
1、 要么使用被包含文件中的内容,实现代码的共享(重用):向上包含(索要)
向上包含:在当前脚本要用某个代码之前包含别的文件
2、 要么自己有东西可以给别的文件使用,实现代码的共享(重用):向下包含(给予)
向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件)
最大的作用:分工协作,每个脚本做的事情不一样,因此可以使用协作方式,让多个脚本共同完成一件事情。
文件包含四种形式
在PHP中文件的包含有四种形式(两种大形式)
Include:包含文件 Include_once:系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次) Require:与include相同 Require_once:以include_once相同
包含基本语法
Include ‘文件名字’; Include(‘文件名字’); //文件名字:路径问题
以上方式:是先包含文件,后使用文件中的内容(向上包含)
向下包含:先准备内容,然后包含另外的文件,在另外的文件中,使用当前的内容
文件加载原理
PHP代码的执行流程
1、读取代码文件(PHP程序)
2、编译:将PHP代码转换成字节码(生成opcode)
3、zendengine引擎来解析opcode,按照字节码去进行逻辑运算
4、转换成对应的HTML代码
文件加载原理:
1、在文件加载(include或者require)的时候,系统会自动的将被包含文件中的代码相当于嵌入到当前文件中
2、加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的include位置
3、在PHP中被包含的文件是单独进行编译的
PHP文件在编译的过程中如果出现了语法错误,那么会失败(不会执行);但是如果被包含文件有错误的时候,系统会在执行到包含include这条语句的时候才会报错。
Include和require区别
Include和include_once的区别:
Include系统会碰到一次,执行一次;如果对统一个文件进行多次加载,那么系统会执行多次
Include_once:系统碰到多次,也只会执行一次。
Require和include的区别:本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样
Include的错误级别比较轻:不会阻止代码执行
Require要求较高:如果包含出错代码不再执行(require后面的代码)
文件加载路径
文件在加载的时候需要指定文件路径才能保证PHP正确的找到对应的文件。
文件的加载路径包含两大类:
1、 绝对路径
从磁盘的根目录开始(本地绝对路径)
Windows:盘符C:/路径/PHP文件 Linux:/路径/PHP文件
从网站根目录开始(网络绝对路径)
/ :相对于网站主机名字对应的路径 Localhost/index.php -> E:/server/apache/htdocs/index.php
2、相对路径:从当前文件所在目录开始的路径
.或./ :表示当前文件夹 ../ :上级目录(当前文件夹的上一层文件夹)
绝对路径和相对路径的加载区别
1、 绝对路径相对效率偏低,但是相对安全(路径不会出问题)
2、 相对路径相对效率高些,但是容易出错(相对路径会发生改变)
函数
函数的基本概念
函数:function,是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)。
函数定义语法
函数有几个对应的关键点:function关键字、函数名、参数(形参和实参)、函数体和返回值
基本语法如下:
function 函数名([参数]){ //函数体 //返回值:return 结果; }
函数是在代码执行阶段,碰到函数名字的时候才会调用,不是在编译阶段。
函数的调用特点:只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)
函数执行的内存分析:
1、读取代码进入到代码段(编译:将代码变成字节码存储到内存)。此时function已经在内存里 2、根据代码逐行执行
以上原因:编译和执行是分开的(先编译后执行)
命名规范:由字母、数字和下划线组成,但是不能以数字开头
函数作为一种常用的结构,一般遵循以下规则:函数通常名字代表着函数的功能,而有些功能会比较复杂,可能一个单词不足以表达,需要多个组合。
1、驼峰法:除了左边第一个单词外,后面所有的单词首字母都大写:showParentInfo() 2、下划线法:单词之间通过下划线连接,单词都是小写:show_parent_info()
函数名字:在一个脚本周期中,不允许出现同名函数(通常在一个系统开发中都不会使用同名函数)
函数的参数分为两种:形参和实参
形参
形参:形式参数,不具有实际意义的参数,是在函数定义时使用的参数
实参
实参:实际参数,具有实际数据意义的参数,是在函数调用时使用的参数
形参是实参的载体:
实参在调用时通常是需要传入到函数内部参与计算(运算),那么需要在函数内部去找到实际数据所在的位置才能找到数据本身:
需要实际调用的时候,将数据以实参的形式传递给形参:给形参赋值,从而使得函数内部可以用到外部数据。
默认值
默认值:default value,指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算。
通常默认值是用在一些,一定会有某个数据参与,但是可能通常是某个我们知道的值。
引用传递
实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果是变量或者常量或者其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样。
有的时候,希望在函数内部拿到的外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫作引用传值。
基本定义语法:
function 函数名(形参1,&形参2){ //函数体 }
在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量。(变量才有指向的数据的内存地址)