php框架实现之概述

时启发 2024-06-24 18:19:51

初学php的话,难免会有选择哪种框架开始的疑问。想要回答这个问题,无疑需要搞清楚什么是框架。框架通常会有framework和skeleton的英文表达。两个单词并没有什么实质上的不同,无论是骨架(skeleton)或者框架(framework),都表示这是一种基本结构。有骨架必然要有血肉,有框架必然要有内容。从php编程的角度讲,都表示着一定程度的php实现。目前,Laravel、ThinkPHP都是较为流行的框架实现。

通常,php框架通过组织管理框架目录下的特定结构和文件,为实现不同功能的域名空间和类的提供基本、便利的接入接口,在实现基本功能的基础上,将前后端功能分离。因此,php框架一般提供了一些常用的功能,也为开发者进行功能扩展提供二次开发可能。

php框架本身的实现有现成的标准约定,在https://www.php-fig.org网站可以找到框架实现的目前标准。比如,基本的代码编写标准PSR-1,一共7条:1、必须使用<?php ?>和短显标记<?= ?>,而非其他;2、文件编码必须为utf-8,且不得带BOM;3、文件应当要么声明符合(类、函数、常量等),要么导致某种副作用(产生输出、改变.ini设置等),而不是两者兼做;4、域名空间和类必须自动加载(最新由PSR-4定义);5、类名必须采用StudlyCaps这种单词首字母大写形式;6、常量字母必须全部为大写形式,单词间以下划线分隔;7、方法名必须采用camelCase驼峰形式。这就意味着,只要按照共同的框架约定开发框架,我们就可以开发出一套“规范的”php框架。而且这些框架约定看起来非常简单并不复杂。

需要特别说明的是域名空间和类的自动加载,本来是由PSR-0定义,但已经废弃,由最新标准PSR-4重新定义。所以,稍作思考,便可了解,开发一个框架,本来应该是从PSR-0开始,但现在是从PSR-4开始,实际上确实如此。

PSR-4的规范,只有4方面内容:1、可自动加载的“class”具体包括类、接口、Trait及其他类似结构;2、完全限定的类名的形式如:<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>;3、为完全限定的类名加载具体文件时需要遵循的一些限制性约定;4、自动加载器必须不能抛出异常,必须不能导致任何层级的错误,不得返回值。

而自动加载器的注册,是通过php的spl_autoload_register函数实现的,下面的代码我们引入了一个简单自动加载器,以当前文件所在目录为根目录,将域名和类名转换为当前目录和子目录下的具体文件,并通过include加载。

图1 一个简单的自动加载器

然后,只要包含了以上内容之后,我们就可以编写一些自定义域名空间的类,将类文件直接存在对应的域名空间目录里即可。

0 阅读:4

时启发

简介:读书笔记,编程经验,旅途见闻,人生感悟