yii2 学习中

属性:

public function __get($name)              // 这里$name是属性名
{
    $getter = ‘get‘ . $name;              // getter函数的函数名
    if (method_exists($this, $getter)) {
        return $this->$getter();          // 调用了getter函数
    } elseif (method_exists($this, ‘set‘ . $name)) {
        throw new InvalidCallException(‘Getting write-only property: ‘
            . get_class($this) . ‘::‘ . $name);
    } else {
        throw new UnknownPropertyException(‘Getting unknown property: ‘
            . get_class($this) . ‘::‘ . $name);
    }
}

// $name是属性名,$value是拟写入的属性值
public function __set($name, $value)
{
    $setter = ‘set‘ . $name;             // setter函数的函数名
    if (method_exists($this, $setter)) {
        $this->$setter($value);          // 调用setter函数
    } elseif (method_exists($this, ‘get‘ . $name)) {
        throw new InvalidCallException(‘Setting read-only property: ‘ .
            get_class($this) . ‘::‘ . $name);
    } else {
        throw new UnknownPropertyException(‘Setting unknown property: ‘
            . get_class($this) . ‘::‘ . $name);
    }
}

someObject->foo实际是调用someObject->getFoo()

someObject->foo = $some_value 实际是 someObject->setFoo($some_value)

如下的Post类,实现了可读可写的属性title:

class Post extends yii\base\Object    // 第一步:继承自 yii\base\Object
{
    private $_title;                 // 第二步:声明一个私有成员变量

    public function getTitle()       // 第三步:提供getter和setter
    {
        return $this->_title;
    }

    public function setTitle($value)
    {
        $this->_title = trim($value);
    }
}

这样好处多多

Component继承于yii\base\object, 具有以下三个重要特征

  属性

  事件

  行为

事件:

yii\base\Component::on() 就是用来绑定的

$person = new Person;

// 使用PHP全局函数作为handler来进行绑定
$person->on(Person::EVENT_GREET, ‘person_say_hello‘);

// 使用对象$obj的成员函数say_hello来进行绑定
$person->on(Person::EVENT_GREET, [$obj, ‘say_hello‘]);

// 使用类Greet的静态成员函数say_hello进行绑定
$person->on(Person::EVENT_GREET, [‘app\helper\Greet‘, ‘say_hello‘]);

// 使用匿名函数
$person->on(Person::EVENT_GREET, function ($event) {
    echo ‘Hello‘;
});

行为:

行为是把一个类绑定到另一个类, 让第二个类有第一个类的属性和方法. 即:不改变现有类的情况下, 对类的功能进行扩充

使用行为的大致流程

  • 从 yii\base\Component 派生自己的类,以便使用行为;
  • 从 yii\base\Behavior 派生自己的行为类,里面定义行为涉及到的属性、方法;
  • 将Component和Behavior绑定起来;
  • 像使用Component自身的属性和方法一样,尽情使用行为中定义的属性和方法。

在http://www.digpage.com/index.html中学习yii2

时间: 2025-01-08 16:58:45

yii2 学习中的相关文章

5月YII2学习总结

5月份YII2学习任务基本上告一段落了,总体感觉只是简单学习了YII2,可以进行基本的应用开发,文档没有全部看完,自己简单做了一个QA问答系统进行练手. QA问答系统功能: 1.登陆.注册.收藏.关注 2.问答 3.文章 4.标签 5.评论 6.其他小功能 一.QA问答系统使用了的特性 模块modules:后台采用模块开发 Url管理:部分a标签使用了url管理,因为时间有限,很多地方是直接硬编码 ActiveRecord的运用:开发QA系统,使用这个就能完成所有数据交互功能了,比如多表关联ge

学编程,学单词.....在学习中积累自己的单词(不断更新__ing)

可以去肆意大话天下,可以去小民一般的言语,但是一定要清楚,知识的积累,至于心中,这样,你才能低至市井,上至高阁....畅通无阻! 1.  Loowater  厕所水 , Loo 盥洗室 学编程,学单词.....在学习中积累自己的单词(不断更新__ing),布布扣,bubuko.com

MFC学习中遇到的小问题和解决方案

1 清除combox里面的内容((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容2 如何获取鼠标指针的位置GetWindowRect 详情见657面 超市管理系统 3 如何获取combox下拉列表的索引:int selgetcursel;getlbtext; 4 选中某行某列值并修改SetItemText 5 单击选中listcontrol控件某行右键 添加一个菜单 并触发事件 (见该网页第15条记录) http:/

作为一名IT从业者,你在工作和学习中,遇到哪些问题

大家都是IT从业者,遇到的问题多少与相似. 如果能把这些问题总结下来,并给出解决方案,相信可以帮助很多的人. 我在ITFriend发起了一个话题"作为一名IT从业者,你在工作和学习中,遇到哪些问题",有很多网友给出了很好的答案. 希望对大家有所帮助. 周琦: 首先说说工作上,作为研发,产品需求不断变更,导致不停的重写代码,这时就需要和产品那边进行沟通确定明确的需求了,而且作为研发我们也可以从产品上提出自己的意见和需求.从而引导别人和提高自己上做出更大的提高.  而当遇到测试方面提出的各

在Yii2.0中实现计划任务(cron)

以下由我们在信易网络公司开发项目的时候终结出的一些经验 Create console application 创建命令行应用 In advance template there is already a file yii. And there is no need to run it as php, it is Linux script. 在高级模版中的 yii 文件,它是一个 Linux 脚本,不需要使用PHP来运行. Create cron service command 创建计划任务服务命

有关JAVA基础学习中的集合讨论

    很高兴能在这里认识大家,我也是刚刚接触后端开发的学习者,相信很多朋友在学习中都会遇到很多头疼的问题,希望我们都能够把问题分享出来,把自己的学习思路整理出来,我们一起探讨一起成长.    今天我在这里简单讲解一下我对学习中集合的理解.很多朋友再写解释的时候,没有从最简单说起,造成了阅读中的困惑,或许我能帮助你对集合有一个新的认识.   首先当我们谈到集合的时候要了解一下集合的具体概念. java集合的概念是相对于数组来说的,那么什么是数组呢?   数组:数组是一段连续存储单元. 每个存储单

java学习中,object 对象的使用(toString、equals、hashCode)(java 学习中的小记录)

java学习中,object 对象的使用(java 学习中的小记录)作者:王可利(Star·星星) object 对象(参考API学习) 重点掌握三个方法: 1.toString 返回该对象的字符串表示. 2.equals(object obj)指示其他某个对象是否与这个对象相等. 3.hashCode() 返回对象的哈希码. 详见代码的注释分析(一个是Person类重写方法,一个是Star类使用方法) Star类代码: 1 package study; 2 3 public class sta

Java学习中,常用的命令管理(Java 学习中的小记录)

Java学习中,常用的命令管理      作者:王可利(Star·星星) 一.Window中常见的dos命令 在哪里操作dos命令: Win7 ---> 开始  ---->所有程序--->附件---->命令提示符 Win7-->  开始  --->运行  ---->输入cmd 1.1 盘符的切换: 盘符眀+冒号  格式: 盘符: 例子: 想从C盘到D盘 C:/User/xxxx  D: 1.2 文件夹的操作 dir :显示当前文件夹中的所有文件和文件夹. cd 路

关于Linux学习中的问题和体会

本科期间未开展过与之相关的课程,所以初次接触Linux难免有些问题!参照老师给的学习资料中内容,逐步解决了一些问题,但还有一些问题没解决,下面列举出自己遇到的一些问题. 1.在环境变量与文件查找专题中,使用vim命令代开sh文件,界面处于可编辑状态,但在窗口编辑过程中编辑完后的文件无法保存,,,,,,后来使用手动创建的方式分别创建了sh文件和C语言文件,完成后来的实验!但需要解决的问题是vim命令使用后文件如何保存. 2.在环境变量专题中,对于环境变量的具体作用理解的还不是很透. 3.在软件安装