找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 135|回复: 0

[php] PHP魔术方法之 __get() 方法详解

[复制链接] IP属地:广东省广州市
发表于 2023-4-18 00:06:24 | 显示全部楼层 |阅读模式
PHP中__get(),获得一个类的成员变量时调用
在 php 面向对象编程中,类的成员属性被设定为 private 后,如果我们试图在外面调用它则会出现“不能访问某个私有属性”的错误。那么为了解决这个问题,我们可以使用魔术方法 __get()。
魔术方法__get()的作用
在程序运行过程中,通过它可以在对象的外部获取私有成员属性的值。
我们通过下面的 __get() 的实例来更进一步的连接它吧:


  1. <?php
  2. class Person
  3. {
  4.     private $name;
  5.     private $age;

  6.     function __construct($name="", $age=1)
  7.     {
  8.         $this->name = $name;
  9.         $this->age = $age;
  10.     }

  11.     /**
  12.      * 在类中添加__get()方法,在直接获取属性值时自动调用一次,以属性名作为参数传入并处理
  13.      * @param $propertyName
  14.      *
  15.      * @return int
  16.      */
  17.     public function __get($propertyName)
  18.     {   
  19.         if ($propertyName == "age") {
  20.             if ($this->age > 30) {
  21.                 return $this->age - 10;
  22.             } else {
  23.                 return $this->$propertyName;
  24.             }
  25.         } else {
  26.             return $this->$propertyName;
  27.         }
  28.     }
  29. }

  30. $Person = new Person("小明", 60);   // 通过Person类实例化的对象,并通过构造方法为属性赋初值
  31. echo "姓名:" . $Person->name . "<br>";   // 直接访问私有属性name,自动调用了__get()方法可以间接获取
  32. echo "年龄:" . $Person->age . "<br>";    // 自动调用了__get()方法,根据对象本身的情况会返回不同的值
复制代码

运行结果:


  1. 姓名:小明

  2. 年龄:50
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|西兴社区 ( 蜀ICP备2022005627号 )|网站地图

GMT+8, 2024-12-27 13:39 , Processed in 0.637620 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表