1、文件包含
文件包含:在一个PHP脚本中去将另一个文件(PHP)包含进来,去完成一件事情
1.1 作用
-
要么使用被包含文件中的内容,实现代码的共享,向上包含(索取)
-
向上包含:当前脚本要用某个代码之前先包含别的文件
-
-
要么自己有东西给别人用,实现代码的共享,向下包含(给予)
-
向下包含:自己写的代码需要别的脚本来实现
-
最大的作用就是分工协作,每个脚本做的事情不一样,使用协作方式来实现多脚本共同完成一件事
1.2 文件包含的四种形式
基本语法:
向上包含:(先准备文件,再使用文件)
<?php $a = 1; define("pi","3.1415"); ?> include('文件被包含文件.php');//注意:文件要在同一路径下 <?php include('文件被包含文件.php'); echo $a, pi; ?>
向下包含:(先准备内容,然后包含另外的文件,在另外的文件中使用准备的内容)
1.3 文件加载原理
1.4 include 和 require的区别
include会执行多次,导致报错(重复定义变量),而include_once不会出现这种情况。
require和include区别在于:若未包含文件,则报错形式不一样。(require包含错误文件,则include后不再执行;include未包含文件,会警告,但是仍会执行后面的。)
1.5 文件加载路径
文件加载时需要指定路径才能正确的找打对应的文件
-
绝对路径(从磁盘根目录开始—本地绝对路径;从网站根目录开始—网络绝对路径--相对于/的路径,,/相当于绝对路径)
-
相对路径:从当前文件所在目录开始的路径。。.或者./表示当前文件夹。。../上级目录
-
绝对路径和相对路径加载区别:绝对路径相对效率偏低(因为要从跟目录开始找,但相对安全,路径固定)
<?php // 文件加载路径 // 相对路径加载(只供演示,不考虑多次加载) include 'include1.php'; // 不写路径,默认在当前文件夹下 include './include1.php'; // 另一种形式 include '../hostdoc/include1.php'; // ../代表当前文件夹的上一个文件夹,hostdoc为当前文件夹 // 绝对路径 include 'E:/server/apache/htdocs/include1.php'; // 绝对路径,不会出错 ?>
1.6 文件包含的嵌套
文件里面包含其他的文件
嵌套包含容易出现相对路径出错的问题。
2、函数
2.1 语法格式
-
将实现某一功能的代码块封装到一个结构中,从而实现代码的复用。
-
函数不会自动运行,必须调用才可
-
代码执行阶段,遇到函数名字才回调用,不是在编译阶段
-
函数调用可在声明之前
语法
语法格式: Function 函数名(参数){ 函数体 返回值 }
例子
function display() { echo 'hello world'; // 没有返回值 } // 函数的调用() diaplay(); // 若函数有参数,则需加参数 // 函数命名规范:字母数字下划线、但不能数字开头。 // 一半遵循以下规则:1、驼峰法:除第一个单词外,其余首字母大写。showParent() 2、下划线方式 // 在一个脚本函数周期中,不允许出现同名函数。
2.2 函数的参数
-
定义函数:定义函数时使用的参数,形参
-
调用函数时使用的参数,实参
function add($arg1,$arg2) // 定义函数:定义函数时使用的参数,形参 { echo arg1+arg2; } // 调用函数时使用的参数,实参 $num1 = 10; add($num1,20);
2.3 行参的默认值
-
默认值:形参的默认值,若调用时没有提供实参,则函数使用默认值执行函数
-
默认值定义时,应放在后边,不能左边有默认值,而右边没有
function moren($num1 = 0,$num2 =0) // 当前的num1是形参,编译时不执行。就算执行也只是在内部执行,如果外部有同名子变量,也不会冲突 { echo $num1-$num; } //调用 moren($num1); //没有输入则使用默认值,有输入就使用输入的值
2.4 函数的传值
引用传递:可在函数内部改变外部变量
2.5 函数体
2.6 函数的返回值
注意:return后面的任意代码都不再执行
2.7 作用域
作用域:变量和常量能够访问的区域
<? php // php中作用域 // 默认的代码空间:全局空间 $global = 'global area'; // 局部变量(函数内部定义) function display() { $inner = 1; // 访问全局变量 echo $global; // 函数内部不能访问全局变量 // 转化为超全局变量,使得函数内部可以访问 echo $GLOBALS['global']; // 这样可访问 } display();
想在函数内部访问全局变量,可通过$GLOBALS,也可使用引用传值。
另,还有一种方式既可从全局访问局部、也可从局部访问全局。即,global关键字:
1、若使用global定义的关键字在外部存在,那么系统在函数内部定义的变量直接指向外部变量所指向的内存空间(同一个变量)。
2、若其定义的变量在外部不存在,系统会自动在全局空间定义一个与局部变量同名的全局变量。
本质为:在函数的内部和外部,对一个同名变量使用同一块内存地址保存数据。
<? php // global关键字的应用 // 默认的代码空间:全局空间 $global = 'global area'; // 局部变量(函数内部定义) function display() { // 访问全局变量 echo $global; // 函数内部不能访问全局变量 // 1、全局变量存在 global $global; echo $global; // 此时可以调用全局变量 //2、全局变量不存在 global $local = 'inner'; } echo $local; // 访问局部变量 display();
2.8 静态变量
静态变量:static是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量(注:跨函数是指同个函数多次调用)
<?php function display(){ //局部变量 $local = 1; //静态变量 static $count = 1; echo $local++, $count++,"<br/>"; } display(); display(); display(); ?>
静态变量原理:系统在进行编译的时候,就已经对static这一行进行了初始化:即为静态变量赋值,而在执行时,会跳过定义这一行。
2.9 可变函数
可变函数:当前有一个变量所保存的值,刚好是一个函数的名字,那么就可以使用$变量()来充当函数名使用。
2.10 匿名函数
匿名函数:没有名字的函数,
// function() // 没有办法运行,故须加一个变量名字 // 变量保存匿名函数,本质得到的是一个对象(closure类中的对象) $func = function() { echo 'hello world'; }; // 因为相当于变量的赋值,所以需加一个分号 // 调用匿名函数 $func();
闭包:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定地计算环境。(简单理解就是说,函数内部的一些局部变量即要执行的代码块,在执行完毕后没有被释放)。没有被释放的原因是:在函数内部,还有对应的函数被引用,通常为匿名函数。
// 闭包函数 function display() { $name == __FUNCTION__; // 定义匿名函数 // $innerfunction = function()// $name 相对于匿名函数来说是外部变量,故不能直接用 // 1、使用匿名函数 2、使用关键字use $innerfunction = function() use($name) // use就是将局部变量(name)保留给内部使用(形成了闭包,使display运行完毕后,不会被释放) { echo $name; } $innerfunction(); // 3、 匿名函数返回给外部使用 return $innerfunction(); // 为验证局部变量未被释放而返回 }; $closure = display(); // 理论上此处局部变量被释放 $closure(); // 结果却输出了name,说明上一行并未释放局部变量
2.11伪类型
PHP中不存在的类型,只是为了方便查看操作手册。(可当作模板,只是为了泛化数据类型)
伪类型有两类:mixed混合的,只要是php中的类型即可;numbe数值的