PHP小知识温馨篇(3)

1.require,require_once,include,include_once与spl_autoload_register

这里有一个情景,在写代码时,我们会把函数或者类归到不同的文件中,根据功能把这些文件保存在某个目录里,再使用require,require_once,include,include_once来执行,以提高代码的重用性和简洁性。

既然有不同,那么肯定有区别。include中文意为包含,require中文意为需求(有必不可少的含义),两个函数都是允许在当前脚本中多次执行包含的文件。而include_once()和require_once()则为确保在执行时对包含的文件 只执行一次调用。

首先来说说require和include的区别,既然前文已经提到了require为需求,说明当前脚本调用的文件是一种需求,说明这个被调用的文件必不可少,那么当这样的文件意外丢失或逻辑出错时,会抛出致命的错误的提示(Fatal Error)并中止脚本。同理,include仅仅只说明当前脚本包含调用的文件,实际上对当前脚本来说不是必须的,那么此时可用include(),即使发生了错误,也仅仅会显示警告错误(Warning Error),脚本会继续执行并输出页面。

在开发一个严谨的项目时,更应该注重这方面的使用,不能把程序的错误信息抛给用户,可在代码中使用error_reporting(0)禁止所有的错误显示。

从性能上来说,require()的加载速度大于require_once(),以10万个请求为测试对象,require()比require_once()减少了2ms的响应时间。 

若想自动加载某个文件,可以用spl_sutoload_register()。

PHP小知识温馨篇(3)_第1张图片

从手册上我们可以看出,spl_autoload_register()被更加推荐。

2.函数传值与引用

一个函数是否灵活,有可用性,根据设计者设计的参数可作初步判断,虽然PHP没有限定参数个数,但是过多的参数会对调用和维护产生影响。

1.值传递

          调用函数多采用值传递,告诉函数完成什么样的任务。func_get_arg()和func_get_args()函数用来获取参数,至于这两个函数的区别,我想攻城狮们看结尾的s应该大致明白了。

2.引用传递

    在实际的项目中,还有一种传值的方法,从优化存储数据角度来看,有了一定提高 。先来两张图看看值传递和引用传递的效果。

值传递:

PHP小知识温馨篇(3)_第2张图片

引用传递:

PHP小知识温馨篇(3)_第3张图片

我们可以看到两种方式的差别在第三个echo的结果,这也就不得不提到一个底层语言,伟大的C语言。而引用传值就与C语言里的“指针”机制相同。它是一个指向内存地址的变量,即可以用一个变量名称把工作地址与原始存储位置简历一个对应关系。如果我们在一个函数的参数前加入引用,表示当函数对该内部变量的值进行修改时,同时也能够反映到函数外部。就像上图中的结果一样,第三个echo的值为函数改变后的值。

3.避免使用过多的参数

      这个是实际开发中必须要避免的问题,总不可能一个函数设置几十个参数,这么多参数就算是设计者也不会每个参数的作用都始终记着它在函数中的作用,调用者用起来很麻烦,而且后期维护也不容易。

    避免的方法:使用数组

     把所有参数通过一个数组变量里传入函数,这样对函数来说就只有一个参数——传入的数组变量。

 

你可能感兴趣的:(学习)