zoukankan      html  css  js  c++  java
  • php魔术方法get和set举例

    php魔术方法get和set举例

     

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数魔术方法:“__get()”和“__set()”。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    <?php
    class Person {
    	//下面是人的成员属性, 都是封装的私有成员
    	private $name; //人的名子
    	private $sex; //人的性别
    	private $age; //人的年龄
    	//__get()方法用来获取私有属性
    	public function __get($name) {
    		echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";
    		if (isset ($this-> $name)) {
    			return ($this-> $name);
    		} else {
    			return (NULL);
    		}
    	}
    	//__set()方法用来设置私有属性
    	public function __set($name, $value) {
    		echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";
    		$this-> $name= $value;
    	}
    }
    $p1 = new Person();
    //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值
    $p1->name = "张三";
    $p1->sex = "男";
    $p1->age = 20;
    //直接获取私有属性的值, 会自动调用__get()方法,返回成员属性的值
    echo "姓名:" . $p1->name . "<br>";
    echo "性别:" . $p1->sex . "<br>";
    echo "年龄:" . $p1->age . "<br>";
    ?>

    运行结果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
    在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
    在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
    在直接获取私有属性值的时候,自动调用了这个__get()方法
    姓名:张三
    在直接获取私有属性值的时候,自动调用了这个__get()方法
    性别:男
    在直接获取私有属性值的时候,自动调用了这个__get()方法
    年龄:20

    注意:魔术方法get和set要定义public访问,否则可能出错: Warning: The magic method __get() must have public visibility and cannot be static in…

  • 相关阅读:
    POJ 2513 (Trie树+欧拉通路+并查集判断连通)
    归并排序及序列逆序数
    POJ 2442 Sequence (堆+K路归并)
    POJ 2513 (Trie树+欧拉通路+并查集判断连通)
    J2EE概述
    J2EE概述
    J2EE概述
    学习视频资料下载论坛
    J2EE概述
    J2EE概述
  • 原文地址:https://www.cnblogs.com/fx2008/p/2974996.html
Copyright © 2011-2022 走看看