
1、Yii 框架的代码风格上于net比较接近,方便我们团队原有人员可以很方便的阅读php代码,上手快。
2、Yii 的框架对扩展支持相当高,很方便扩展,我们慢慢的自己扩展了很多组件。最近甚至修改了程序入口,让我们可以更加在框架内 *** 控程序。
3、很重要的性能,Yii 的性能相对优秀,而且属于轻量级框架。spl_autoload_register 预注册,按需载入文件等对性能都有很大提高。
4、modules 设计是一个很优秀的东西,他理论上可以无限嵌套,当然不建议嵌套超过三层。虽然我们嵌套了两层。
4、widget 窗口小部件的应用,可以更加方便的构造通用模块。当然我们还有更加方便构造通用模块的方法,后边说。
5、其实集成的model,以及CActiveRecord模式 包含的验证机制,都是很好的东西,但是约束性也相对强一些。
6、不得不说的缓存机制,Yii框架封装了各种缓存方式,让你只需要调用统一的方法就可以在不同的缓存中切换。
Yii是一个基于组件的高性能PHP框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了今日Web 20应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。
Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。
E是一款非常简洁优秀开源的超轻量级PHP框架,致力于追求简洁,安全,自由,高效,是中小型项目首选框架。框架构架合理,一键生成完全合乎规范的大型网站文件夹架构,网站架构一目了然。强大的外部类库支持,分布式存储,强大的缓存系统,内置smarty模板引擎,单入口MVC模式,面向对象编程,具有微内核设计,移植性强,松散耦合等特点,能集成到你任何一个系统里面。无论您是一个NewPHPer 还是OLDPHPER,那么E框架是您的首选。学习完E框架后您可以快速并且轻松的驾驭其他框架,步入php高手之列。
本文来自百度百科,如果帮助到你,请采纳一下
yii更优秀,而且要比thinkphp优秀很多。
要回答分别是哪些方面优秀我们先要明白,框架是用来干什么的。
框架的作用:1、简化开发。2、提高工程的可维护性。3、规避编程语言本身的坑和陷阱。
那么我们就从这3个方面来讨论下着二者的优劣。
1、简化开发方面:从新手的视角来看(或者表面来看),thinkphp做项目更简单,因为其一提供了大部分web开发常用类库,其二中文手册写的很详细。但事实上,thinkphp有两个缺失的特性导致一旦项目做久或者稍微上规模,就会使人头痛不堪,这缺失的两个特性分别是:完整的AR支持以及完善的多层次模型
其次,web项目开发中大部分代码都是重复的,因此自动化代码生成工具是必不可少的,截至最新的tp323,我仍然没看到tp对自动化工具有任何支持的迹象
2、可维护性,缺失了完整的AR和多层次模型,代码不可能工整到哪里去,代码一多,源代码必然跟面条一样杂乱。最重要的时,TP没有unitTest,这导致重构都无门。同样,数据库方面,tp缺失了数据迁移工具,这都导致了项目后期维护由很大困难
3、规避编程语言本身的坑和陷阱:tp和Yii都是由PHP做的实现,PHP本身有很多的坑和陷阱,诸如混乱的语言结构与函数傻傻分不清的关系,变量转换的陷阱,凌乱不堪的类库命名。这些在yii里基本都得到了改善,Yii完全用面向对象的方式构建,常用web类库都以组件方式呈现,终于改善了PHP程序员边写代码边百度:‘XX功能该用哪个函数’的情况。反观TP,仅仅对常用类库封装成class,要用什么取什么,根本没做过精心的设计,完全像是一个多年的程序员攒了些类库,然后七拼八凑而成的一个框架,因此我常常说,thinkphp是个伪MVC框架。
你写个php脚本 输出phpinfo(); 看看有没有加载openssl这个扩展(在整个页面搜索一下就知道了)
如果没有,估计是修改错了phpini或者没重启(后者你重启了,估计就是前面的原因)
我记得wamp的phpini有两个,你试试从该应用程序左键(托盘处),从那里找到phpini然后修改,重启,再看看phpinfo(); 有没有openssl,有的话就应该ok了(许久不用windows,不知道wamp这个软件有没有变化,总之先按照我的来做吧)
本文实例分析了Yii实现MySQL多数据库和读写分离的方法。分享给大家供大家参考。具体分析如下: Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 20应用开发所需要的几乎一切功能,也是最强大的框架之一,下文我们来介绍Yii实现MySQL多库和读写分离的方法 前段时间为SNS产品做了架构设计,在程序框架方面做了不少相关的压力测试,最终选定了YiiFramework,至于为什么没选用公司内部的 PHP框架,其实理由很充分,公司的框架虽然是"前辈"们辛苦的积累,但毕竟不够成熟,没有大型项目的历练,犹如一个涉世未深的年轻小伙。Yii作为一个 颇有名气开源产品,必定有很多人在使用,意味着有一批人在维护,而且在这之前,我也使用Yii开发过大型项目,Yii的设计模式和它的易扩展特性足以堪当重任。 SNS同一般的社交产品不同的就是它最终要承受大并发和大数据量的考验,架构设计时就要考虑这些问题, web分布式、负载均衡、分布式文件存储、MySQL分布式或读写分离、NoSQL以及各种缓存,这些都是必不可少的应用方案,本文所讲的就是MySQL 分库和主从读写分离在Yii的配置和使用。 Yii默认是不支持读写分离的,我们可以利用Yii的事件驱动模式来实现MySQL的读写分离。 Yii提供了一个强大的CActiveRecord数据库 *** 作类,通过重写getDbConnection方法来实现数据库的切换,然后通过事件 beforeSave、beforeDelete、beforeFind 来实现读写服务器的切换,还需要两个配置文件dbconfig和modelconfig分别配置数据库主从服务器和model所对应的数据库名称,附代码 DBConfigphp文件如下: 复制代码 代码如下:<php return array( 'passport' => array( 'write' => array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=101392;dbname=db1′, 'emulatePrepare' => true, //'enableParamLogging' => true, 'enableProfiling' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8′, 'schemaCachingDuration'=>3600, ), 'read' => array( array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=101393;dbname=db1, 'emulatePrepare' => true, //'enableParamLogging' => true, 'enableProfiling' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8′, 'schemaCachingDuration'=>3600, ), array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=101394;dbname=db3′, 'emulatePrepare' => true, //'enableParamLogging' => true, 'enableProfiling' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8′, 'schemaCachingDuration'=>3600, ), ), ), ); ModelConfigphp如下: 复制代码 代码如下:<php return array( //key为数据库名称,value为Model 'passport' => array('User','Post'), 'microblog' => array('…'), ); > ActiveRecordphp如下: 复制代码 代码如下:/ 基于CActiveRecord类的封装,实现多库和主从读写分离 所有Model都必须继承些类 / class ActiveRecord extends CActiveRecord { //model配置 public $modelConfig = ''; //数据库配置 public $dbConfig = ''; //定义一个多数据库集合 static $dataBase = array(); //当前数据库名称 public $dbName = ''; //定义库类型(读或写) public $dbType = 'read'; //'read' or 'write' / 在原有基础上添加了一个dbname参数 @param string $scenario Model的应用场景 @param string $dbname 数据库名称 / public function __construct($scenario='insert', $dbname = '') { if (!empty($dbname)) $this->dbName = $dbname; parent::__construct($scenario); } / 重写父类的getDbConnection方法 多库和主从都在这里切换 / public function getDbConnection() { //如果指定的数据库对象存在则直接返回 if (self::$dataBase[$this->dbName]!==null) return self::$dataBase[$this->dbName]; if ($this->dbName == 'db'){ self::$dataBase[$this->dbName] = Yii::app()->getDb(); }else{ $this->changeConn($this->dbType); } if(self::$dataBase[$this->dbName] instanceof CDbConnection){ self::$dataBase[$this->dbName]->setActive(true); return self::$dataBase[$this->dbName]; } else throw new CDbException(Yii::t('yii','Model requires a "db" CDbConnection application component')); } / 获取配置文件 @param unknown_type $type @param unknown_type $key / private function getConfig($type="modelConfig",$key="){ $config = Yii::app()->params[$type]; if($key) $config = $config[$key]; return $config; } / 获取数据库名称 / private function getDbName(){ if($this->dbName) return $this->dbName; $modelName = get_class($this->model()); $this->modelConfig = $this->getConfig('modelConfig'); //获取model所对应的数据库名 if($this->modelConfig)foreach($this->modelConfig as $key=>$val){ if(in_array($modelName,$val)){ $dbName = $key; break; } } return $dbName; } / 切换数据库连接 @param unknown_type $dbtype / protected function changeConn($dbtype = 'read'){ if($this->dbType == $dbtype && self::$dataBase[$this->dbName] !== null) return self::$dataBase[$this->dbName]; $this->dbName = $this->getDbName(); if(Yii::app()->getComponent($this->dbName'_'$dbtype) !== null){ self::$dataBase[$this->dbName] = Yii::app()->getComponent($this->dbName'_'$dbtype); return self::$dataBase[$this->dbName]; } $this->dbConfig = $this->getConfig('dbConfig',$this->dbName); //跟据类型取对应的配置(从库是随机值) if($dbtype == 'write'){ $config = $this->dbConfig[$dbtype]; }else{ $slavekey = array_rand($this->dbConfig[$dbtype]); $config = $this->dbConfig[$dbtype][$slavekey]; } //将数据库配置加到component中 if($dbComponent = Yii::createComponent($config)){ Yii::app()->setComponent($this->dbName'_'$dbtype,$dbComponent); self::$dataBase[$this->dbName] = Yii::app()->getComponent($this->dbName'_'$dbtype); $this->dbType = $dbtype; return self::$dataBase[$this->dbName]; } else throw new CDbException(Yii::t('yii','Model requires a "changeConn" CDbConnection application component')); } / 保存数据前选择 主 数据库 / protected function beforeSave(){ parent::beforeSave(); $this->changeConn('write'); return true; } / 删除数据前选择 主 数据库 / protected function beforeDelete(){ parent::beforeDelete(); $this->changeConn('write'); return true; } / 读取数据选择 从 数据库 / protected function beforeFind(){ parent::beforeFind(); $this->changeConn('read'); return true; } / 获取master库对象 / public function dbWrite(){ return $this->changeConn('write'); } / 获取slave库对象 / public function dbRead(){ return $this->changeConn('read'); } } 这是我写好的类,放在components文件夹里,然后所有的Model都继承ActiveRecord类就可以实现多库和主从读写分离了,至于如何支持原生的SQL也同时使用读写分离,此类都已经实现。 希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
以上就是关于YII 框架的优点有哪些全部的内容,包括:YII 框架的优点有哪些、在yii框架validate是什么意思、今天面试老板问我E框架,我一下就懵了,E框架是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)