当前位置:Gxlcms > PHP教程 > yii2相比yii1.1.x有什么变化?

yii2相比yii1.1.x有什么变化?

时间:2021-07-01 10:21:17 帮助过:25人阅读

yii 2 相比yii 1.1.x ,有什么优点和变化 ?选择时应该注意什么?

回复内容:

更新:重新写了一个,改正了一些书写错误,并进行排版,更新的版本在
《深入理解Yii2.0》附录1:Yii2.0 对比 Yii1.1 的重大改进
---------------------------
我自己翻的官方升级文档,供参考:

In this chapter, we list the major changes introduced in Yii 2.0 since version 1.1. We hope this list will make it easier for you to upgrade from Yii 1.1 and quickly master Yii 2.0 based on your existing Yii knowledge.


本章将列出自1.1版本以来Yii 2.0的主要变化。


命名空间(Namespace)

The most obvious change in Yii 2.0 is the use of namespaces. Almost every core class is namespaced, e.g., yii\web\Request. The “C” prefix is no longer used in class names. The naming of the namespaces follows the directory structure. For example, yii\web\Request indicates the corresponding class file is web/Request.php under the Yii framework folder. You can use any core class without explicitly including that class file, thanks to the Yii class loader.


Yii 2.0最明显的改变是对命名空间的使用。几乎所有的核心类都使用了命名空间,比如yii\web\Request。同时,类名前不再使用“C”前缀。命名空间的命名遵循目录结构,如yii\web\Request代表的相应类文件是位于Yii 框架的目录下的 web/Request.php。由于Yii的类装载机制,可以在未显示包含类文件的情况下使用任意的核心类。


组件(Component)和对象(Object)

Yii 2.0 breaks the CComponent class in 1.1 into two classes: [[yii\base\Object]] and [[yii\base\Component]]. The [[yii\base\Object|Object]] class is a lightweight base class that allows defining class properties via getters and setters. The [[yii\base\Component|Component]] class extends from [[yii\base\Object|Object]] and supports the event feature and the behavior feature.


Yii 2.0将1.1版本中的CComponent类拆分成两个类:[[yii\base\Object]] 和 [[yii\base\Component]]。其中,[[yii\base\Object|Object]]类是一个轻量级的基类,它通过getter 和setter提供了定义类属性(property)的方法。[[yii\base\Component|Component]]继承自[[yii \base\Object|Object]],并提供对事件(event)和行为(behavior)的支持。


If your class does not need the event or behavior feature, you should consider using Object as the base class. This is usually the case for classes that represent basic data structures.


如果自定义类不需要事件或行为特性,可考虑使用Object 作为基类。这通常用于表示基础的数据结构。


对象配置Object Configuration

The [[yii\base\Object|Object]] class introduces a uniform way of configuring objects. Any descendant class of [[yii\base\Object|Object]] should declare its constructor (if needed) in the following way so that it can be properly configured:


[[yii\base\Object|Object]]对配置对象引入了一个规范的方法。其后代类可以在需要的情况下通过如下的方式声明一个构造函数,那么该类就可以被正确的配置:

class MyClass extends \yii\base\Object
{
    function __construct($param1, $param2, $config = [])
    {
        // ... initialization before configuration is applied

        parent::__construct($config);
    }

    public function init ()
    {
        parent::init();

        // ... initialization after configuration is applied
    }
}
门外汉开个头(用过一小段时间1以及看2发布了看了点核码)

变化及优点:
大致思路不会变,开发流程变化也不是很大。
有变化的是
1、yii2带入的PHP5.4的特性,引入了namespace解决命名冲突,因此基类不会再C字开头了
2、不再所有类都继承自组件Component,而是选择继承object和component(也继承自object,但带有事件功能、以及用于扩展的Behavior功能)
3、更加的MVC,原先的view层其实基本算是controller直接include进来的,现在有了view的类用来控制,因此View层在使用Controller带来的参数的方式稍有不同。
4、yii2分基本版(看上去和1差不多)和高级版(分前台和后台),高级版更加适合开发大型项目。
5、其他的都是细节方面的变化,比如块赋值(基本用于收集表单数据)更加方便了。安装完毕界面就自带bootstrap风格了,等等等等。
当然还有许多其他的特性,可以直接参看yii在git上更新的文档:
yii2/docs/guide/upgrade-from-v1.md at master 路 yiisoft/yii2 路 GitHub

--update--
1、加入了Dependency Injection(依赖注入,理论可以看经典翻译文IoC容器和依赖注入模式(转)-redcoffee-ChinaUnix博客,yii的具体实现看/vendor/yiisoft/yii2/di下的container和instance就行),以后创建对象时基本都可以用容器的get方法替代new了,很不错很赞哟~

选择:
如果你急于马上开启一个项目的话 用1.1.X,因为2的正式版估计还有好多个月吧。
如果你是带着学习研究的态度的,直接从2的beta版开始看吧,和正式版不会变化很大。

纯门外汉瞎搭,大神路过发现有不对之处随意拍砖:P 推荐一个博客地址,关于教程的:http://www.fancyecommerce.com/

人气教程排行