클래스 멤버가 private으로 정의되어 있어도 클래스의 인스턴스를 생성하지 않고도 외부에서 접근이 가능합니다.
PHP는 버전 5.0부터 리플렉션 메커니즘을 추가했습니다. PHP 실행 환경에서 클래스, 메서드, 속성, 매개변수, 주석 등에 액세스하고 사용할 수 있는 강력한 리플렉션 API 세트를 제공합니다. 이 기능은 매우 강력합니다 확장성이 뛰어난 PHP 프레임워크에서 자주 사용되며, 자동으로 플러그인을 로드하고, 자동으로 문서를 생성하며, 심지어 PHP 언어를 확장하는 데에도 사용할 수 있습니다. (추천 학습: PHP 프로그래밍 초보부터 능숙까지 )
PHP에 내장된 oop 확장 기능이자 언어 자체의 기능이므로 추가적인 확장이나 구성을 추가하지 않고도 사용할 수 있습니다.
PHP 리플렉션 API는 클래스, 메서드, 속성, 매개변수 등을 기반으로 해당 리플렉션 클래스를 유지하고 해당 호출 API를 제공합니다.
Access
User 클래스가 정의되었다고 가정하면 먼저 이 클래스의 리플렉션 클래스 인스턴스를 생성한 다음 이 인스턴스를 기반으로 User의 속성이나 메서드에 액세스할 수 있습니다. 클래스에 정의된 멤버 권한 선언은 공개 여부에 관계없이 획득할 수 있습니다.
<?php namespace Extend; use ReflectionClass; use Exception; /** * 用户相关类 * Class User * @package Extend */ class User{ const ROLE = 'Students'; 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; } } $class = new ReflectionClass('Extend\User'); // 将类名User作为参数,即可建立User类的反射类 $properties = $class->getProperties(); // 获取User类的所有属性,返回ReflectionProperty的数组 $property = $class->getProperty('password'); // 获取User类的password属性ReflectionProperty $methods = $class->getMethods(); // 获取User类的所有方法,返回ReflectionMethod数组 $method = $class->getMethod('getUsername'); // 获取User类的getUsername方法的ReflectionMethod $constants = $class->getConstants(); // 获取所有常量,返回常量定义数组 $constant = $class->getConstant('ROLE'); // 获取ROLE常量 $namespace = $class->getNamespaceName(); // 获取类的命名空间 $comment_class = $class->getDocComment(); // 获取User类的注释文档,即定义在类之前的注释 $comment_method = $class->getMethod('getUsername')->getDocComment(); // 获取User类中getUsername方法的注释文档
참고: 리플렉션 클래스를 생성할 때 전달되는 클래스 이름에는 use 키워드가 사용되는 경우에도 전체 네임스페이스가 포함되어야 합니다. 그렇지 않으면 클래스 이름을 찾을 수 없으면 예외가 발생합니다.
위 내용은 리플렉션을 구현하기 위해 PHP는 무엇을 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!