php框架使用方法大全(PHP MVC框架中类的自动加载机制实例分析)
类别:编程学习 浏览量:2664
时间:2021-10-23 10:30:07 php框架使用方法大全
PHP MVC框架中类的自动加载机制实例分析本文实例讲述了PHP MVC框架中类的自动加载机制。分享给大家供大家参考,具体如下:
原文
实现类的自动加载主要使用到了set_include_path
和spl_autoload_register
函数。
set_include_path
用于提前设置好可能会加载的类的路径。
spl_autoload_register
用于调用相关自动加载所需类的函数,实现自动载入的功能。
有一点要注意的是:自动加载在实例化类的时候执行,也就是说使用extends继承类的时候,是不会自动加载父类的。
设置目录如下:
实现自动加载功能相关的文件有:Loader.php,config.php,boot.php,index.php
config.php
|
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 10:48 */ define( "APP_PATH" ,__DIR__. "/.." ); define( "Controller_PATH" ,__DIR__. "/../controller" ); define( "Model_PATH" ,__DIR__. "/../model" ); define( "View_PATH" ,__DIR__. "/../view" ); |
Loader.php
|
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 12:03 */ class Loader { public static function baseLoad() { require_once ( "Controller.php" ); require_once ( "Model.php" ); } public static function autoload( $class ) { $path = $class . ".class.php" ; require_once ( $path ); } } $include = array (Controller_PATH, Model_PATH,View_PATH); set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $include )); spl_autoload_register( array ( 'Loader' , 'autoload' )); Loader::baseLoad(); |
boot.php
|
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 12:19 */ require_once ( "Loader.php" ); |
index.php
|
<?php require_once (__DIR__. "/libs/config.php" ); require_once (__DIR__. "/libs/boot.php" ); $obj = new testController(); $obj ->show(); |
经测试,以上代码可用,全文完。
加更
经测试上面的代码,在访问不存在的控制器是会报错,找不到相关类文件。因为我们缺少判断相关类文件是否存在。因此,我们对Loader.php进行优化,首先扫描相关类文件是否存在,如果不存在则报错。
|
<?php /** * Created by PhpStorm. * User: koastal * Date: 2016/5/15 * Time: 12:03 */ require_once 'config.php' ; class Loader { public static function baseLoad() { require_once ( "Controller.php" ); require_once ( "Model.php" ); } public static function searchFile( $filename , $path ) { $filePath = false; $list = scandir( $path ); foreach ( $list as $file ){ $realPath = $path .DIRECTORY_SEPARATOR. $file ; if ( is_dir ( $realPath ) && $file != '.' && $file != '..' ){ $res = Loader::searchFile( $filename , $realPath ); if ( $res ){ return $res ; } } elseif ( $file != '.' && $file != '..' ){ if ( $file == $filename ){ $filePath = $realPath ; break ; } } } return $filePath ; } public static function autoload( $class ) { $filename = $class . ".class.php" ; $cflag = Loader::searchFile( $filename ,Controller_PATH); $mfalg = Loader::searchFile( $filename ,Model_PATH); $path = false; $path = ( $cflag != false)? $cflag : $path ; $path = ( $mfalg != false)? $mfalg : $path ; if ( $path == false){ exit ( "Class Load Failed." ); } else { require_once ( $path ); } } } Loader::baseLoad(); spl_autoload_register( array ( 'Loader' , 'autoload' )); |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/koastal/article/details/51417030
您可能感兴趣
- php redis配置(php+redis实现消息队列功能示例)
- php中如何使用缓存(PHP使用OB缓存实现静态化功能示例)
- phpstudy的mysql无法启动(Windows系统下解决PhPStudy MySQL启动失败问题)
- php在if里添加xml代码(PHP创建XML接口示例)
- phpcurl缺点(PHP封装cURL工具类与应用示例)
- php生成md5(php进行md5加密简单实例方法)
- php 结果集转json(PHP的JSON封装、转变及输出操作示例)
- php各个模式使用场景(PHP 并发场景的几种解决方案)
- php如何发邮件(PHP示例演示发送邮件给某个邮箱)
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- php提交表单验证表(php实现的表单验证类完整示例)
- php全栈之路教程(PHP进阶学习之依赖注入与Ioc容器详解)
- php cookie(php更新cookie内容的详细方法)
- 宝塔面板php能切换吗(BT宝塔面板更换网站PHP版本)
- php nginx 底层执行流程(nginx/apache/php隐藏http头部版本信息的实现方法)
- php静态类和动态类的区别(PHP Trait代码复用类与多继承实现方法详解)
- 仙女们的私藏鲜法大PK 鲜香切块牛肉(仙女们的私藏鲜法大PK)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
热门推荐
- mysql查询条件的优化(MySQL查询优化之查询慢原因和解决技巧)
- 云服务器的巧妙用法(云服务器的技术是如何实现的?)
- python读取和写入数据excel(Python向excel中写入数据的方法)
- dedecms操作手册(织梦DEDECMS结构化数据Meta申明标签)
- react代码展示(教你如何从 html 实现一个 react)
- ie浏览器css颜色兼容(IE8的css hack9 使用说明)
- dedecms怎样快速找到图片位置(dede搬家后路径变化批量替换图片路径避免图片不能正常显示)
- mysql错误代码之1064的解决方案(mysql错误代码之1064的解决方案)
- 如何用python处理excel表格(零基础使用Python读写处理Excel表格的方法)
- 安装laravel框架(laravel框架的安装与路由实例分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9