博主信息
博文 33
粉丝 0
评论 2
访问量 51883
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP面向对象编程:属性访问方法_get()、_set()
hanyufeng的博客
原创
1499人浏览过

要严格遵守封装性原则,应避免直接从类的外部访问类的成员属性(设置为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 '<br>';
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)


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学