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对象模型(PHP数据对象映射模式实例分析)
- 宝塔linux面板php7.0安装不上(宝塔面板php.ini文件在哪里找)
- php怎么实现多线程(PHP实现的多进程控制demo示例)
- phpstudy的默认网站根目录是什么(phpstudy v8.0创建本地站点域名教程图文)
- php扩展安装示例(php扩展开发入门demo示例)
- phpstudy如何域名访问(phpStudy2016 配置多个域名期间遇到的问题小结)
- php7.4类型属性实例详解(PHP 7.4中使用预加载的方法详解)
- phpstudy报错(phpStudy运行帝国备份王出错解决方法)
- php中变量定义规则(PHP中__set实例用法和基础讲解)
- php批量导出所有数据库(php快速导入大量数据的实例方法)
- php 精度误差调整(php精度计算的问题解析)
- thinkphp接口开发实例(ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解)
- php收集多个统计数据(PHP实现统计代码行数小工具)
- apache2.4支持php5.5吗(WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置)
- phpmysql完全学习手册教程(Windows下搭建PHP开发环境Apache+PHP+MySQL)
- 自己在做项目过程中的php知识(PHP+Oracle本地开发环境搭建方法详解)
- 红色代表什么(红色代表什么情感和含义)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
热门推荐
- javascript四种数组(javascript数组includes、reduce的基本使用)
- sql语句中leftjoin的作用(sql中的left join及on、where条件关键字的区别详解)
- iis服务器的配置(win7下配置使用IIS搭建自己的WEB服务器)
- pythonmysql使用教程(Python异步操作MySQL示例使用aiomysql)
- JS中call和apply区别
- vue 怎么设置滚动条的长度(vue使用better-scroll实现横向滚动的方法实例)
- sqlserver使用简介(SQL Server Page结构深入分析)
- 深入理解mysql日志(mysql 重要日志文件汇总)
- tomcat与eclipse配置运行(Tomcat配置及如何在Eclipse中启动)
- 如何修改dedecms(dedecms做英文站修改方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9