PHP的反射机制详解

本文详细介绍了PHP的反射API,如何通过反射访问类、方法、属性、参数和注释,即使它们是私有的。文中通过实例展示了如何创建反射类实例,获取反射属性和方法,以及如何反射实例化和执行类的方法,包括公有和非公有成员。同时提醒读者,直接访问私有成员会抛出异常,必须使用相应方法。最后,文中提供了相关学习资源。
摘要由CSDN通过智能技术生成

PHP的反射机制提供了一套反射API,用来访问和使用类、方法、属性、参数和注释等,比如可以通过一个对象知道这个对象所属的类,这个类包含哪些方法,这些方法需要传入什么参数,每个参数是什么类型等等,不用创建类的实例也可以访问类的成员和方法,就算类成员定义为 private也可以在外部访问。

官方文档提供了诸如 ReflectionClass、ReflectionMethod、ReflectionObject、ReflectionExtension 等反射类及相应的API,用得最多的是 ReflectionClass

为了演示反射效果,首先创建一个类(假设定义了一个类 User),并实例化。基于这个实例,反射类可以访问 User 中的属性和方法。

<?php
/**
 * 用户相关类
 */
class User {
   
    public $username;
    private $password;

    public function __construct($username, $password)
    {
   
        $this->username = $username;
        $this->password = $password;
    }

    /**
     * 获取用户名
     * @return string
     */
    public function getUsername()
    {
   
        return $this->username;
    }

    /**
     * 设置用户名
     * @param string $username
     */
    public function setUsername($username)
    {
   
        $this->username = $username;
    }

    /**
     * 获取密码
     * @return string
     */
    private function getPassword()
    {
   
        return $this->password;
    }

    /**
     * 设置密码
     * @param string $password
     */
    private function setPassowrd($password)
    {
   
        $this->password = $password;
    }
}

创建反射类实例

$refClass = new ReflectionClass(new User('liulu', '123456'));

// 也可以写成 
$refClass = new ReflectionClass('User'); // 将类名User作为参数,建立User类的反射类

反射属性

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值