php 面向对象过滤字段,PHP面向对象编程:属性访问方法_get()、_set()

本文介绍了PHP中的魔术方法__get()和__set(),它们用于处理私有或受保护属性的访问。通过这两个方法,可以确保封装性,同时简化代码。示例展示了如何使用这两个方法来读取和设置私有属性,以及当访问不存在的属性时,如何自动创建公共属性。此外,还提到可以在__get()和__set()中添加额外逻辑,如权限检查。
摘要由CSDN通过智能技术生成

要严格遵守封装性原则,应避免直接从类的外部访问类的成员属性(设置为private),但如果都逐个编写访问函数,则又过于繁琐。

属性访问方法__get()、__set()用于解决这个问题,既保证了封装性,又节省了工作量。

这两个方法会被自动调用(在访问属性时),PHP 将这类方法称为魔术方法(Magic methods)。

PHP 的所有魔术方法都以 __(两个下划线)开头,所以在定义类方法时,除了魔术方法,建议不要以 __ 为前缀。

示例:class Student

{

private $name; //私有属性,外部不可访问

private $grade; //私有属性,外部不可访问

private $class; //私有属性,外部不可访问

//__get()方法获取私有属性值

public function __get($propertyName){

return $this->$propertyName;

}

//__set()方法设置私有属性值

public function __set($propertyName,$value){

$this->$propertyName = $value;

}

}

$stu = new Student();

$stu->name = 'zhangsan';

$stu->grade = '2015级';

echo $stu->name;

echo '
';

echo $stu->grade;

运行效果:zhangsan

2015级

__get()、__set()方法只需要添加一次,可以用于private、protected属性的访问。

扩展:

如果需要,还可以在__get()、__set()方法中添加其它代码,进行一些处理,例如按照有无权限进行过滤。

如果访问的是不存在的属性,则会创建一个public 属性,例如:class Student

{

protected $name; //私有属性,外部不可访问

private $grade = '2015级'; //私有属性,外部不可访问

//__get()方法获取私有属性值

public function __get($propertyName){

return $this->$propertyName;

}

//__set()方法设置私有属性值

public function __set($propertyName,$value){

$this->$propertyName = $value;

}

}

$stu = new Student();

$stu->class = '1班';  //访问类中不存在的属性 class

var_dump($stu);

运行结果:object(Student)[1]  protected 'name' => null

private 'grade' => string '2015级' (length=7)

public 'class' => string '1班' (length=4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值