码迷,mamicode.com
首页 > Web开发 > 详细

PHP面向对象魔术方法之__get 和 __set函数

时间:2019-02-15 23:56:01      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:变量   情况下   属性   固定   html   fun   nbsp   访问   private   

l 基本的介绍

(1) 当我们去使用不可以访问的属性时,系统就会调用__get方法.

(2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性)

(3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法

l 举例说明

需求是: 如果对象有一个成员变量是private、protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办?

代码如下

<?php
    header(‘content-type:text/html;charset=utf-8‘);
    //__get 和 __set

    class Monkey{
        public $name;
        protected $food;
        public function __construct($name, $food){
            $this->name = $name;
            $this->food = $food;
        }

        //魔术方法 __get
        //1. 魔术方法名字是固定,系统提供
        //2. $pro_name 是形式参数,表示属性名
        public function __get($pro_name){
        
//            echo ‘<br> pro_name ‘ . $pro_name;
            
            //做一个判断
if(property_exists($this, $pro_name)){ return $this->$pro_name; }else{ return ‘没有该属性,无法返回!‘; } } //魔术方法 __set //1. 魔术方法名字是固定,系统提供 //2. $pro_name 是形式参数,表示属性名, $pro_val 是属性值 public function __set($pro_name, $pro_val){ //echo ‘<br> $pro_name = ‘ . $pro_name . ‘ pro_val ‘ . $pro_val; //判断属性是否存在 if(property_exists($this, $pro_name)){ $this->$pro_name = $pro_val; }else{ return ‘属性不存在,无法赋值‘; } } } //创建对象 $monkey1 = new Monkey(‘妖猴‘, ‘小孩‘); echo ‘<br> 猴子名字是 ‘ . $monkey1->name; //需求 //因为 food是不可访问的属性(protected) echo ‘<br> 猴子喜欢吃 ‘ . $monkey1->food; //修改猴子的名字和食物 $monkey1->name = ‘猴妖‘; //在默认情况下,不能直接给一个protected属性赋值, 会触发 //__set魔术方法. $monkey1->food = ‘桃子‘; echo ‘<br> 新的值是 <br>‘; echo ‘<br> 猴子名字是 ‘ . $monkey1->name; //需求: echo ‘<br> 猴子喜欢吃 ‘ . $monkey1->food;

 

PHP面向对象魔术方法之__get 和 __set函数

标签:变量   情况下   属性   固定   html   fun   nbsp   访问   private   

原文地址:https://www.cnblogs.com/lsqbk/p/10386457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!