__get __set 实例

本文详细介绍了PHP中通过魔术方法__get()和__set()实现私有属性的代理访问与设置,展示了如何在不破坏封装性的前提下灵活操作私有变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
class Person
{
    //下面是人的成员属性,都是封装的私有成员
    private $name; //人的名子
    private $sex; //人的性别
    private $age; //人的年龄
    //__get()方法用来获取私有属性
    function __get($property_name)
    {
        echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";
        if(isset($this->$property_name))
        {
            return($this->$property_name);
        }
        else
        {
            return 220;
        }
    }
    //__set()方法用来设置私有属性
    function __set($property_name, $value)
    {
        echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";
        $this->$property_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>";
echo "年龄2:".$p1->msp."<br>";



<?php
error_reporting(E_ALL);
class stu{
    private $a;
    private $b = 0;
    public $c;
    public $d = 0;

    //这里的 private 可以用 protected public 替代
    private function __get($name) {
        return 123;
    }

    //这里的 private 也可以用 protected public 替代
    private function __set($name, $value) {
        echo "This is set function";
    }
}
 
$s = new stu();
 
var_dump($s->a);  //output: 123
var_dump($s->b);  //output: 123
var_dump($s->c);  //output: null
var_dump($s->d);  //output: 0
var_dump($s->e);  //output: 123
 
$s->a = 3;   //output: This is set function
$s->c = 3;  //no output
$s->f = 3;  //output: This is set function
?>

?>

 

转载于:https://www.cnblogs.com/jiufen/p/4989125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值