自动加载(phalcon\Loader)

By Yang | December 24, 2018

一、php文件引入
通过 include() 或 require() 函数,可以在PHP程序执行之前在该文件中插入一个文件的内容。
区别:处理错误的方式不同。include() 函数会生成一个警告(但是脚本会继续执行),而 require() 函数会生成一个致命错误(fatal error)(在错误发生后脚本会停止执行)
* 正因为在文件不存在或被重命名后脚本不会继续执行,因此我们推荐使用 require() 而不是 include()。
二、php类自动加载
参考文章:php手册 和 PHP的类自动加载机制
在php5之前,各php框架实现类的加载,一般要按照某种约定实现一个遍历目录,自动加载符合约定条件的文件类或函数。因此在php5之前类的使用并没有现在频繁。
在php5之后,当加载php类的时候,如果类所在文件夹并没有被包含进来或是类名出错时,Zend引擎会自动调用__autoload函数。__autoload函数需要用户自己实现。
在php5.1.2版本之后,可以使用spl_autoload_register函数自定义加载处理函数。当没有调用此函数,默认情况下会使用spl自定义的spl_autoload函数。
1. php自动加载之__autoload
function __autoload($className) {
$file = $className . ‘.php’;
if (is_file($file)) {
require($file);
}else{
echo ‘no this ‘ . $className . ‘ class file’;
}
}
$demo = new Demo();
事实上,我们可以看到__autoload至少需要做三件事(“三步走”),它们分别是:
根据类名确定类的文件名。
确定类文件所在路径,上例用的是中用的是相对定位,我们的测试文件其实在同一目录下。
将指定类所在文件加载到程序中。
在第一步和第二步中,我们必须约定类名与文件的映射方法,只有这样我们才能够依据类名找到其所对应的文件,实现加载。
因此__autoload自动加载中,最重要的就是指定类名与其所在文件的对应关系。当有大量的类需要包含进来的时候,我们只需要确立相应的规则,然后将类名与其对应的文件进行映射,就能够实现惰性加载(lazy loading)了。
Tip:spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。
2. php自动加载之spl_autoload_register
引言:如果在一个php系统实现中,使用了很多的其他类库,这些类库可能是由不同的工程师进行开发的,因此类名与其所在文件的映射规则不尽相同。这时候如果要实现类库的自动加载,就必须在__autoload函数中将所有的映射规则全部实现。这就会导致__autoload会非常复杂,甚至无法实现。同时还会使得__autoload函数十分臃肿。为将来系统的维护和性能带来很大的负面影响。(__autoload的弊端)
spl_autoload_register:
注册给定的函数作为__autoload的实现。简单来说就是将函数注册之SPL的__autoload函数栈中,并移除系统默认的__autload()函数。
function __autoload($className) {
echo ‘autload class:’, $className, ‘
‘;
}
function classLoader($className) {
echo ‘SPL load class:’, $className, [...]

nginx gzip压缩参数含义

By Yang | November 30, 2018

# 开启压缩
gzip on;
# 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
gzip_min_length 2k;
# 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
# 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_buffers 4 16k;
#压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 5;
# 默认值: gzip_types text/html (默认不对js/css文件进行压缩)
# 压缩类型,匹配MIME类型进行压缩
# 不能用通配符 text/*
# (无论是否指定)text/html默认已经压缩
# 设置哪压缩种文本文件可参考 conf/mime.types
gzip_types text/plain application/x-javascript text/css application/xml;
# 值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩
gzip_http_version 1.0
# IE6及以下禁止压缩
gzip_disable “MSIE [1-6]\.”;
# 默认值:off
# Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
# off - 关闭所有的代理结果数据的压缩
# expired - 启用压缩,如果header头中包含 “Expires” 头信息
# no-cache - 启用压缩,如果header头中包含 “Cache-Control:no-cache” 头信息
# no-store [...]

gcc error unrecognized command line option ‘-qversion’ gcc fatal error no input files

By Yang | December 18, 2017

gcc error unrecognized command line option ‘-qversion’ gcc fatal error no input files

A compiler with support for C++11 language features is required.

By Yang | December 18, 2017

A compiler with support for C++11 language features is required.

xunsearch 开机自动启动 debian 7 /etc/rc.local 没生效

By Yang | October 18, 2017

xunsearch 开机自动启动 debian 7 /etc/rc.local 没生效

专业的网站优化服务提供商

Search