set和get方法

set和get方法

set和get方法是比较重要的方法。

例如:

<?php

class Account
{
    private $user = 1;
    private $pwd = 2;
}

$a = new Account();
echo $a->user;
$a->name = 5;
echo $a->name;
echo $a->big;

运行结果为:

Fatal error: Cannot access private property Account::$user in set_get.php on line 10

报错的意思是说,不能访问Account对象的私有属性user。代码修改为如下:

<?php

class Account
{
    private $user = 1;
    private $pwd = 2;

    public function __set($name, $value)
    {
        echo "Setting $name to $value \r\n";
        $this->$name = $value;
    }

    public function __get($name)
    {
        if (!isset($this->$name)) {
            echo "未设置";
            $this->$name = "正在为你设置默认值";
        }
        return $this->$name;
    }
}

$a = new Account();
echo $a->user;
$a->name = 5;
echo $a->name;
echo $a->big;

运行结果为:

1Setting name to 5 5未设置Setting big to 正在为你设置默认值 正在为你设置默认值

__set__get方法为PHP的内置方法,有特殊含义。手册里将他们归到重载。

PHP的重载和Java等语言的重载不同。Java里,重载值一个类中可以定义参数列表不同但名字相同的多个方法。比如Java也有构造函数,Java允许有多个构造函数,只要保证方法签名不一样就行;而PHP则在一个类中只允许有一个构造函数。

PHP提供的”重载”指动态地”创建”类属性和方法。因此,__set__get方法被归到重载里。

这里可以看出,若类中定义了__set__get这一对魔术方法,那么当给对象属性赋值或取值时,即使这个属性不存在,也不会报错,一定程度上增强了程序的健壮性。

我们注意到,在account类里,user属性的访问权限是私有的,只能在类内部对其进行操作。如果没有__set这个魔术方法,直接在类的外部对属性进行赋值是会报错的,只能通过定义一个public方法,然后在类外调用这个方法,对属性进行读写操作。

如果用了这两个魔术方法,对私有属性的操作变得更加方便了,它们和在对外的public方法中操作private属性的原理一样,这对魔术方法是自动调用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值