当前位置: 首页 > news >正文

《php面向对象》第28课:封装复杂的MVC-配置文件

配置文件主要存放连接数据库地址、用户、密码、数据库等相关信息。为什么要把这些写到配置文件中呢?

配置文件存放在哪里,主要看项目的需要和自己的喜好。我们在index.php入口文件中,能正确引入配置文件就可以了。

<?php //配置文件 return [ 'db' => [ 'host' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'myschool', ], 'defaultController' => 'index', 'defaultAction' => 'index', ];

分析一下,我们把连接数据库的地址,用户名等,都写进了数组中,然后返回给调用者。

我们看index.php中,如何使用这个配置文件的。

// 加载配置文件 $config = require(__DIR__ . '/../config/config.php'); // 实例化框架类 (new fastphp\Fastphp($config))->run();

真正地使用配置文件,实际上在fastphp.php文件中,下面是代码片断

class Fastphp { // 配置内容 protected $config = []; public function __construct($config) { $this->config = $config; } // 运行程序 public function run() { $this->setDbConfig(); } // 配置数据库信息 public function setDbConfig() { if ($this->config['db']) { define('DB_HOST', $this->config['db']['host']); define('DB_NAME', $this->config['db']['dbname']); define('DB_USER', $this->config['db']['username']); define('DB_PASS', $this->config['db']['password']); } } }

我们把index.php文件和falstphp.php文件结合起来看,能否看懂如何加载配置文件的?最后配置文件中的数组又变成了什么呢?

这两个问题通过阅读代码,就可以找到答案。

如果你能回能这些问题,说明你的基础比较牢固,可以继续学习。

那么,这些配置文件中的数据最后在哪里使用呢?因为大部分数据是关于数据库相关的,可以在数据库操作的文件中找到。

下面是db.php文件的部分代码

class Db { private static $pdo = null; public static function pdo() { if (self::$pdo !== null) { return self::$pdo; } try { $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', DB_HOST, DB_NAME); $option = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC); return self::$pdo = new PDO($dsn, DB_USER, DB_PASS, $option); } catch (PDOException $e) { exit($e->getMessage()); } } }

上在代码中的DB_HOST,DB_NAME,就是来自于fastphp.php定义的常量。

通过以上代码的分析 ,配置文件从定义到最终的使用,经历了若干个文件。

这样做的目的,是为了方便MVC框架的使用者,只需要改一改config.php文件即可,不需要到代码中修改。

当然对于我们初学者来说,为了更好的把控以后用到的thinkphp, yii, ci等框架,现在要把里面的来龙去脉弄清楚。

http://www.jsqmd.com/news/1282148/

相关文章:

  • Beyond Compare 5 激活指南:3分钟快速免费激活终极教程
  • 博客分类和博客专栏整合在一起了
  • PHP:数组函数(1)
  • java线程的状态、线程池、Lambda表达式
  • 首饰回收红榜测评 杭州钱塘区 2026 上门收珠宝靠谱门店梳理 - 每日生活报
  • 边缘推理芯片横向对比报告:从 Kendryte K230 到 Rockchip RV1126 的 AI 算力实测分析
  • 洛谷P1002 过河卒------Python代码实现
  • 经典CNN和GAN论文代码总结(未完待续... ...)
  • 武汉没考上高中上什么学校?武汉科创职业技术学校 2026 招生简章 - 武汉中职最新信息发布
  • 中山夏令营:军博营地深受信赖 - 18102756859
  • 面向对象基础知识
  • 本地apache配置多个虚拟域名
  • 2026石家庄黄金回收就来丽坤奢品汇18617962974全国连锁专业靠谱 - 丽坤奢品汇
  • 边缘 AI 中间件选型地图:从推理引擎到模型仓库再到监控系统的全栈技术栈推荐
  • sklearn.linear_model.LogisticRegression()函数解析(最清晰的解释)
  • N_m3u8DL-RE:为什么这个跨平台下载器能完美解决你的流媒体下载难题?
  • 【ASP.NET】ASP.NET中session和cookie的区别和联系
  • 在OpenCV里实现极坐标变换3
  • 终极指南:如何在15分钟内完成Honey Select 2游戏增强补丁的完整安装与配置
  • 快速删除node_moduels文件夹
  • nmap的使用
  • 1054 求平均值 (20 分)*sscanf和sprintf函数的用法
  • 终极Twitch掉落挖矿指南:告别手动观看,智能自动化获取游戏奖励
  • 156、产线质量管控:影像模组标定与一致性检测的实战策略
  • 从被动抢修到事前巡检:DLC-1 电缆测距仪助力风电长效运维
  • NumPy库入门 北理工嵩天老师python数据分析与展示随堂笔记 (1)
  • 46天上线千问办公,陈宇森如何带领阿里在腾讯先发优势下突围?
  • 外卖CPS解决方案哪家靠谱,推广用户裂变算法落地实操
  • 剑指Offer_编程题(C#实现)_ 链表中倒数第k个结点
  • [Linux 驱动] -- platform_device 与 paltform_driver 的匹配(i2c_client 与 i2c_driver)