php -- 魔术方法 之 获取属性:__get()

属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载

__get():获取不存在或者权限不够的属性的时候会自动触发
<?php
   header(‘Content-type:text/html;charset=utf-8‘);
   echo ‘<pre>‘;

   //PHP属性重载
   class Person{
      //属性
      public $name;
      protected $money;
      private $age;

      //构造方法
      public function __construct($name,$money,$age){
         $this->name = $name;
         $this->age  = $age;
         $this->money  = $money;
      }

      //增加一个魔术方法__get
      //__get方法必须要一个参数,需要访问的属性的名字
      public function __get($name){
         //var_dump($name);
         $allow = array(‘money‘,‘age‘);
         //让用户访问
         //如果用户访问的是money和tail,那么就帮助用户去访问,如果是其他返回FALSE
         if(in_array($name,$allow)){
            return $this->$name;            //$name叫做可变变量
         }else{
            //不存在
            return false;
         }
      }
   }

   //实例化
   $person = new Person(‘马浩洋‘,6000,28);

   //访问个人信息
   echo $person->name;          //可以,访问公有属性
   //echo $person->age;         //不可以,age是私有属性,且Person类没有__get方法

   //Person类增加__get方法之后
   echo $person->age;

   //访问一个不存在的
   var_dump($person->tail);

意义:

  1、增加代码容错性

  2、控制用户访问

时间: 2024-07-30 12:40:59

php -- 魔术方法 之 获取属性:__get()的相关文章

PHP常用魔术方法(__set、__get魔术方法:)

__set.__get魔术方法: //文件名:Object.php <?phpnamespace IMooc;class Object{ protected $array = array(); function __set($name, $value)//set魔术方法 { var_dump(__METHOD__);//输出当前方法 $this->array[$name]=$value;//$name=title,$value="哎哟喂" } function __get(

php -- 魔术方法 之 删除属性:__unset()

属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __unset():当删除一个不存在或者权限不够的属性的时候会自动触发 <?php //属性重载 class Person{ //属性 public $name; private $age; //构造方法 public function __construct($name,$age) { $this->name = $name; $this->age = $age; } //增加__unset方

php中的魔术方法__call(),__clone(),__set(),__get()

__call($a,$v),当在类外部调用类中不存在或者不可见(用protected,private修饰)的方法时,会自动调用__call(方法名,数组参数),此时会向改方法传递2个参数,第一个为调用的方法名,第二个为传递的参数放进数组里.__clone()方法在类的对象被克隆时触发.__set($key,$val)在类外部设置类中不存在或者不可见(protected,private修饰)的属性时触发该方法,此时传递2个参数,第一个是属性名,第二个是属性值.__get($key)在类外部获取类中

反射示例1-----执行反射dll的方法和获取属性的值

项目结构: 将Document类库生成的DLL文件放在ConsoleApplication2\ConsoleApplication2\bin\Debug文件夹下 -------------------------------------------------------------Document.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst

PHP 对象 魔术方法 __get __set __isset __unset

class Person{     private $age = 20;     private $sex = 'male';     //__get()自动调用,是在直接访问私有成员时,自动调用!一个参数 属性值     function __get($value){         return $this->$value;     }     //__set()自动调用,是在直接设置私有属性值时,一个参数是属性名,一个参数是属性值     function __set($name,$val

__unset()魔术方法 删除类内私有属性

__unset()魔术方法 删除私有属性 unset()对共有属性进行删除 可通过__unset()魔术方法对私有属性进行操作 当在类外部执行unset()函数时,自动执行类内__unset()魔术方法 class hdw { private $name; private $age; private $money; //员工工资 public $c; function __construct($name, $age = '', $money) { $this->name = $name; $th

1.2魔术方法和延迟静态绑定

一.魔术方法: 1.__get,__set __get:获取一个不可访问的属性时触发(不可访问指属性不存在,或者没有访问权限) __set:为一个不可访问的属性赋值的时候触发 2.__isset,__unset __isset:当用isset()函数判断一个不可访问的属性时触发 __unset:当用unset()函数操作一个不可访问的属性时触发 3.__call,__callStatic __call:当调用一个不可访问的方法时触发 __callStatic:当调用一个不可访问的静态方法时触发

php中的重载以及几个常用的魔术方法示例

在面向对象语言中,有一个很重要的概念——overload,即重载.所谓重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同.但是,在php中,这个概念跟大多面向对象语言中的“重载”一点关系都没有,根本就是风马牛不相及的. php中的重载,是指动态地"创建"类属性和方法.当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.再说的直白点,就是访问一个类或者对象的不可访问的属性或者方法的时候的一种处理机制.(不可访问,比如不存在或者因访问关键字的限制而

PHP中的常见魔术方法功能作用及用法实例

概述 在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发.这篇文章简单总结了PHP中提供的魔术方法. 开始之前 在总结PHP的魔术方法之前先来定义两个类,以便后边示例使用: 复制代码代码如下: <?phpclass Device {    public $name;               public $battery;            public $data