若您不了解PHP的命名空间,请到PHP官网:《》进行自我充电
整套程序中,控制器、模型和PESCMS提供的自带扩展库,必须在文件的开头声明了命名空间。
声明的方法非常简单:依据当前文件所在目录,在开头进行声明则可。如下文件:App/Home/GET/index.class.php
使用命名空间是整套PESCMS的结构精髓所在,命名空间让我们加载文件变得非常简单。
反命名空间
上述代码的作用为实例化PDO对象,受命名空间的影响,程序最终实例化的PDO对象时,文件加载会成为:Core/DB/PDO.class.php。因此,我们需要对PDO加上一个反斜杠声明,告知程序该对象不受本命名空间影响。
若您的程序遇到加载错误的问题,不妨试下进行反命名空间。
PESCMS的控制器、模型和自定义扩展库(不含第三库)的文件后缀命名均已: 文件名.class.php 形式记录。基于命名空间的文件自动加载机制,文件的后缀必须保持一致。因此请您务必确保上述文件的后缀命名,否则将出现文件加载失败的错误。
自身文件
是不是非常简单呢?原本应该调用require/include加载文件,现在变为更需要声明命名空间和类名则实现了加载!更重要的是,在任意地方创建的文件,只要按照PESCMS的文件后缀命名、声明命名文件所在的完整目录和代码是基于对象编写的,则完全可以平滑的实现自动加载。
关于为何不用use
可能有朋友觉得在实例化、调用方法前,不在文件头部使用use声明的待引入文件的命名空间做法存在不解。其实在早期的PESCMS版本,引入文件前,我都会再文件头部use需要加载文件的命名空间。可随着项目的深入开发,我发现出问题每次定位我都要拉文件到头部看一下该对象,方法所在的命名空间。一来一回,我调试的时间就被浪费在找use位置上面了。因此,后面我就做了调整,很少在文件头部使用use声明命名空间。
第三方库文件
加载第三方库,如EXCEL,PHPMailer。他们的命名规则并不符合PESCMS规则,并且未必使用上命名空间。更有甚者自身实现了一套自动加载文件规则。这个时候第三方库将无法使用PESCMS自动加载规则,并且产生了加载冲突。为此PESCMS给出临时屏蔽自身加载规则,调用第三方自动加载规则的方式。具体用法我们以编写适用于PESCMS的Excel类库的实例说明:
注:不是所有第三方库需要安装上面的做法进行。大家在开发过程,可以先尝试使用require/include方式加载并运行,出问题再尝试屏蔽PESCMS的自动加载方式。最终的解决方式请按照PESCMS的错误信息进行修正。