学习这件事不在乎有没有人教你,最重要的是在于你自己有没有觉悟和恒心。————法布尔

编程

yaf框架熟悉记录

  • 2020-05-11 22:24
简介 :入职公司一周,熟悉下yaf框架,记录下自己理解,边项目边熟悉再记录吧。

官网地址传送门

yaf 跟传统框架区别(自己理解)

传统框架的大概特点

传统框架一般都是由php脚本语言按照一点的设计模式。比如mvc模式进行封装的一套组件,特点就是有个入口文件,这个入口文件是一切往后加载程序到内存的唯一入口,这个入口文件一般为index.php , 一般框架的入口文件会干几件事,加载index.php到内存:

入口脚本index.php程序脚本内容一般大概逻辑:

  • 1. 定义一些必要的目录地址常量,开关常量(如报错开关)这些常量方便业务代码逻辑调用。
  • 2. 加载必要的配置文件类。
  • 3. 加载针对http的requst_uri的路由处理类(配合自动加载)。
  • 4. 加载自定义函数库。
  • 5. 加载程序错误捕获处理类。
  • 6. 加载日志类。
  • 7. 加载DB驱动类。
  • 8. 加载视图类(如smarty)
  • 9. 访问默认控制器,输出信息。

配合高逼格设计模式就是个框架了。哈哈哈哈哈~~~ 传统框架加载每一个http请求都会从入口文件加载1-9步骤那么多信息,处理完业务,最后释放进程资源回收,开销很大。(后来php有了swoole扩展,可以使框架常驻进程,避免反复加载释放~)

yaf特点

yafphp扩展的方式运行,调用对yaf内部类的重写继承类来实现业务逻辑,并且按照yaf定义的目录结构,加载类的规则,用默认路由或者自定义路由规则进行,由于yaf扩展在php进程启动的时候,就已经按照php.ini配置文件中的指定扩展加载完毕,所以yaf核心框架是常驻内存的。没有了反复加载释放的开销,效率比传统的高(感觉很准,没测哈~)。个人熟悉这两天感觉缺点就是没有完善的类库,自定义yaf你还的会写扩展(hello world不算的那种)。

yaf的自动加载

按照yaf的自定义自动加载,目录名_类名 -> [真实路径: libary/目录名/类文件(类名以:目录名_类名方式定义],3.2本本支持psr-4命名空间的方式注册自己的本地类,命名规则进行自动加载。举个例子:

  • 在控制器中使用类:
  • new Helper_demo();
  • 按照yaf自己的自动加载规则,会去lirbar目录下(这个地址在配置文件指定,默认是这个目录)/Helper/demo.php
  • demo.php 内容如下:
  • class Helper_demo {
  • public function run(){
  • print 'hello world';
  • }
  • }
  • yaf 3.2版本支持注册自己命名空间方式加载自定义类。
  • (yaf有个use_spl_autoload的配置,开启的情况下, Yaf在加载不成功的情况下, 会继续让PHP的自动加载函数加载, 比如用use 命名空间方式加载compoer下的vender类库)

何为本地类全局类

我理解为本地类就是项目中(lirbary)目录下的自定义类,或者三方类, 全局类是需要在php.ini 定义ap.libary库地址下的库文件,作为全局共享库(类似session共享的逻辑都可以往公共库读取类)。

边写项目边完善,刚熟悉~~~

Top