专注于WEB技术的IT博客

php面向对象编程之魔术方法__set

时间:2013-03-25分类: php浏览:4632
分享到:

在介绍__set()之前,我们来了解一下什么叫魔术方法及其作用。php的内置方法中,有一些方法叫魔术方法,它们的作用,方法名称、方法的参数列表和返回值都是在PHP中规定好的,并且都是以下画划“__“开始的方法,如前面我们介绍的构造函数“__construct"和析构函数"__destruct“都是魔术方法。



魔术方法的作用

每个魔术方法都有它自己的特定作用,使用时不需要用户直接调用,而是在特定的情况下自动被调用,如前面我们已经知道的“__construct"在初始化对象时自动调用,"__destruct“在销毁对象时自动调用。



魔术方法__set()方法

__set( $property, $value )方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。

调试一下面的例子以加深理解。

<?php
class Person  {
                              
        private $name;
        private $age;
        function __construct($name="",  $age=25) {
            $this->name = $name;
            $this->age = $age;
        }
        //声明魔术方法需要两个参数,真接为私有属性赋值时自动调用,并可以屏蔽一些非法赋值
        private function __set($property, $Value) {
                                  
            if($property=="age"){
                if($Value > 150 || $Value <0)
                    return;
            }
                                   
            $this->$property = $Value;
        }
                              
        public function say(){ //在类中声明说话的方法,将所有的私有属性说出
            echo "我叫".$this->name.",今年".$this->age."岁了";
        }
    }
    $Person=new Person("张三",25);//注意,初始值将被下面所改变
    //自动调用了__set()函数,将属性名name传给第一个参数,将属性值”李四”传给第二个参数
    $Person->name="李四";     //赋值成功。如果没有__set(),则出错。
                          
    //自动调用了__set()函数,将属性名age传给第一个参数,将属性值26传给第二个参数
    $Person->age=26;          //赋值成功
    $Person->age=160;         //160是一个非法值,赋值失效
    $Person->say();  //输出:我叫李四,今年26岁了        
?>



猜你喜欢
php面向对象之__autoload()
php面向对象之__call处理错误调用
php面向对象之__toString()
PHP面向对象之const常量修饰符
php面向对象之final的应用
php面向对象之克隆对象
PHP面向对象之对象和引用
php面向对象之类的静态成员
php面向对象之子类中重载父类的方法
php面向对象的访问类型控制
标签 : php 面向对象
除非注明,本文首发网志博客,欢迎转载!转载请注明本文地址:http://w3note.com/web/95.html,谢谢。
  • 评论
  • 赞助本站