首页 > 代码库 > 文件载入流程,函数的使用【函数名,参数【按引用赋值的问题】,函数体,【变量作用域和生命周期】】
文件载入流程,函数的使用【函数名,参数【按引用赋值的问题】,函数体,【变量作用域和生命周期】】
1.求最大公约数
辗转相除求值
例如:12,8求最大公约数
12%8=4[不为零]
8%4=0[为零,则4为最大公约数]
【原理就是12,8的最大公约数和8,4的最大公约数一致】【这个问题已经可被证明】
计算机中最早的算法
2.文件载入---流程
【php执行的先后顺序】【php对代码的编译以文件为单位】
先检查一个文件中的语法
再进行编译
然后才会一行行解释执行
【这一点需要注意】
这里进行文件载入的流程讲解:
php文件载入时,被引入的文件中的语法并不会解析,只有当该文件被执行【也就是被引入语句之后的部分才会报错】
也就是说,载入文件部位前面的解析不被载入文件的语法所影响。只会到执行到include这样的语句时,才会对文件进行语法检查
【其实也就是一个包含include的文件中的语法检查并不会在执行前对被包含的文件的语法进行检查】
当载入一个文件时,先退出当前的php模式,然后将载入的文件代码载入,然后再执行,再进入php模式。
【这样一个过程保证了php载入过程时,可以载入任何情况的文件:php和HTML等,因为php本身就是嵌入式编程文件,所以嵌入各种文件并不
受影响】
【而也就是载入文件相当于将文件代码复制到载入文件的指定位置,所以关于文件载入的路径是相对于文件执行的位置的原因】
【最后include和require的区别】
include只会触发一个警告
require会触发一个致命错误【脚本停止运行】
include_once:只载入一次【有一个该文件是否被加载的判断机制存在,效果更好】
在实际编程中,常用的还是require【效率高(相比较带once而言),并且会即时报错】
以上就是文件载入的所有问题。【先不考虑载入文件中的header】
【在项目中,我们会将载入文件的方法都写在同一个文件中】
文件载入中的return的功能【模块化之后,模块文件作为数据容器之后,使用return将获得的数据返回给载入文件中】
【这也是框架中最常用的关键字,但是这里的return不是函数中处理函数返回值的关键字,而是文件中直接retuen数据,会终止被包含脚本
的执行】
载入文件总结:
载入文件的内容是一些定义的方法时,那么载入之后就会保证代码的执行,但是载入的内容包括数据时,被包含的数据并不是直接拿来显示
和使用。【看一下数据库config包含文件的情况】
载入文件的path问题【set_include_path对搜索路径的设置】
载入文件的原理【相当于代码的复制和执行,但是为何载入都是数据的文件会有问题?
经过测试,可以正常包含并且使用被包含的数据,这里包含数据文件使用return的目的应该是为了使获取包含文件返回值直接进行赋值到某
变量,而不是轻率的使用原本文件中的变量名,因为变量名有可能会出现冲突和重写
载入文件的机制就是将代码复制到载入位置,只是知道执行到载入位置才会被包含文件中代码进行语法检测
】
以上便是载入文件的内容,重点对原理和path进行理解
3.控制脚本执行
die
exit
exit用于调试脚本
die用于错误抛出
sleep相当于脚本的延时效果
4.函数的使用
函数的使用本身就是为了代码重用,因为函数的调用可以多次使用
与大多数API函数一样,都是用于代码重用,和调用的灵活性
【php和js的一些比较相近的观念】
函数的使用就是模块化的开始
php中对function关键字的代码优先编译【php中,可以先调用后定义函数,但是该调用只能在一个文件内】
【因为require语句并不会优先被编译】
php也注意这个提前的规则
函数分为几部分
(1)【函数名的两个特例:可变函数和匿名函数】
【可变函数】
php中函数调用也可以使用变量实现调用【函数的调用可以由一个变量来充当】
【php函数调用就是一个字符串实现,php可以使用变量来实现标示符是理所当然的。而函数调用本身就是一个标示符调用】
function hello(){
echo ‘hello‘;
}
$hello = ‘hello‘;
$hello();//实现变量调用函数
使用变量来调用函数,优点就是能够动态实现函数调用的效果【工厂方法实现调用函数,根据不同条件调用不同的函数】
【匿名函数】
函数用于直接调用的情形
$say = function(){};
这才是匿名函数的使用场景
【php中的匿名函数是通过closure(闭包)对象实现的。php中的闭包函数就是匿名函数】
【php中作用域概念对闭包没有太多的要求】
【php就是通过对象来实现匿名函数进行管理】
(2)【函数的参数:形参和实参】
形参和实参的关键就是一个赋值的问题【也就是值传递和引用传递】
值传递相当于实参赋值一份值给形参
引用传递相当于实参将自己的引用传递给形参
【需要进一步研究赋值中的引用问题】
【引用传值的途径就相当于给变量加了一个别名,当改动这个别名时,该变量值也同样改变。这也是为什么修改数组中数据时,使用引用传
值时更加高效,而值传递的变量改动并不会改动原本的数据】【只是引用传递的unset情况只是将引用处理掉,并不会直接被垃圾回收掉。这
也是php自身的垃圾回收机制】
【值传递就是单纯复制了一份而已】
以上【引用传值问题已经解决】
【参数的默认值,形参指定默认值】【使用默认值的形参放在参数中的后面,为了调用时方便。如果放在前面,默认值本身没有意义,因为
必须在调用时保证实参值存在】
【参数的个数,形参和实参要进行对应(实参可以数量多,形参数量多的话,需要将多余的形参转化为默认值)】
针对参数数量的问题,有一种情形【不定参数函数】
function hello(){
//形参一个都不定义
func_get_args();//通过php默认的这个方法来获得传入的参数
}
hello(1,2,3...);
以上这种情况就是不定参数函数
(3)【函数体】
函数是一个可执行代码的集合。
函数体的关键就是返回值
return
【注意:引用返回】
function &f1(){
//这种定义函数的情况表示,这个函数可以返回引用,但不是一定返回
return
}
$result
5.变量作用域和生命周期
变量作用域的不同带来了全局变量和局部变量的区别。另外系统定义的变量由超全局变量【$_GET之类】
【关键】
php中的作用域都不能互相访问【php作用域不可重叠。和js相区别】
【一定要区别php的全局变量的访问权。而js中因为作用域链使得全局变量实现超全局的作用】
文件载入流程,函数的使用【函数名,参数【按引用赋值的问题】,函数体,【变量作用域和生命周期】】