• 技术文章 >php教程 >php手册

    详解在PHP的Yii框架中使用行为Behaviors的方法,yiibehaviors

    2016-06-13 08:43:54原创537

    详解在PHP的Yii框架中使用行为Behaviors的方法,yiibehaviors


    一个绑定了行为的类,表现起来是这样的:

    // Step 1: 定义一个将绑定行为的类
    class MyClass extends yii\base\Component
    {
      // 空的
    }
    
    // Step 2: 定义一个行为类,他将绑定到MyClass上
    class MyBehavior extends yii\base\Behavior
    {
      // 行为的一个属性
      public $property1 = 'This is property in MyBehavior.';
    
      // 行为的一个方法
      public function method1()
      {
        return 'Method in MyBehavior is called.';
      }
    }
    
    $myClass = new MyClass();
    $myBehavior = new MyBehavior();
    
    // Step 3: 将行为绑定到类上
    $myClass->attachBehavior('myBehavior', $myBehavior);
    
    // Step 4: 访问行为中的属性和方法,就和访问类自身的属性和方法一样
    echo $myClass->property1;
    echo $myClass->method1();
    
    

    上面的代码你不用全都看懂,虽然你可能已经用脚趾头猜到了这些代码的意思, 但这里你只需要记住行为中的属性和方法可以被所绑定的类像访问自身的属性和方法一样直接访问就OK了。 代码中, $myClass 是没有 property1 method() 成员的。这俩是 $myBehavior 的成员。 但是,通过 attachBehavior() 将行为绑定到对象之后, $myCalss 就好像练成了吸星大法、化功大法,表现的财大气粗,将别人的属性和方法都变成了自己的。

    另外,从上面的代码中,你还要掌握使用行为的大致流程:

    使用行为,必须像前文描述的一样先把它附加到 yii\base\Component 类或其子类。一旦行为附加到组件,就可以直接使用它。

    行为附加到组件后,可以通过组件访问一个行为的公共成员变量或 getter 和 setter 方法定义的属性:

    // "prop1" 是定义在行为类的属性
    echo $component->prop1;
    $component->prop1 = $value;
    类似地也可以调用行为的公共方法:
    
    // foo() 是定义在行为类的公共方法
    $component->foo();
    
    

    如你所见,尽管 $component 未定义 prop1 和 foo() ,它们用起来也像组件自己定义的一样。

    如果两个行为都定义了一样的属性或方法,并且它们都附加到同一个组件,那么首先附加上的行为在属性或方法被访问时有优先权。

    附加行为到组件时的命名行为,可以使用这个名称来访问行为对象,如下所示:

    $behavior = $component->getBehavior('myBehavior');
    

    也能获取附加到这个组件的所有行为:

    $behaviors = $component->getBehaviors();
    

    移除行为

    要移除行为,可以调用 yii\base\Component::detachBehavior() 方法用行为相关联的名字实现:

    $component->detachBehavior('myBehavior1');
    

    也可以移除全部行为:

    $component->detachBehaviors();
    

    您可能感兴趣的文章:

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP Yii mysql数据库
    上一篇:PostgreSQL空值null参与运算的处理方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php利用新浪接口查询ip获取地理位置• php 连接 mysql数据库操作类• 字符过滤程序• JavaScript+PHP应用一:网页• 第十节--抽象方法和抽象类--ClassesandObjectsinPHP510
    1/1

    PHP中文网