PHP 반사 메커니즘 사례 설명
클래스 구성원 이 private 로 정의 되 더 라 도 외부 에서 접근 할 수 있 으 며,클래스 를 만 들 지 않 아 도 클래스 의 구성원 과 방법 에 접근 할 수 있 습 니 다.
PHP 는 5.0 버 전 이후 반사 체 제 를 추 가 했 습 니 다.강력 한 반사 API 를 제공 합 니 다.PHP 실행 환경 에서 클래스,방법,속성,파라미터 와 주석 등 을 방문 하고 사용 할 수 있 습 니 다.그 기능 이 매우 강하 고 확장 이 높 은 PHP 프레임 워 크 에 자주 사용 되 며 플러그 인 을 자동 으로 불 러 오고 문 서 를 자동 으로 생 성 하 며 심지어 PHP 언어 를 확장 할 수 있 습 니 다.얘 가 PHP 라 서.ǖoop 확장 은 언어 자체 의 특성 을 가지 고 있 기 때문에 확장 이나 설정 을 추가 하지 않 아 도 사용 할 수 있 습 니 다.더 많은 내용 은공식 문서
반사 유형
PHP 반사 API 는 클래스,방법,속성,파라미터 등 을 기반 으로 반사 클래스 를 유지 하고 해당 하 는 호출 API 를 제공 합 니 다.
유형
설명 하 다.
Reflector
Reflector 는 내 보 낼 수 있 는 모든 반사 클래스 에 의 해 구현 되 는 인터페이스 입 니 다(implement)
Reflection
반사 류
ReflectionClass
관련 정 보 를 보고 하 다.
ReflectionZendExtension
Zend 확장 정보 보고
ReflectionExtension
PHP 확장 에 대한 정 보 를 보 고 했 습 니 다.
ReflectionFunction
함수 에 대한 정 보 를 보고 하 였 습 니 다.
ReflectionFunctionAbstract
Reflection Function 의 부류
ReflectionMethod
방법 에 관 한 정 보 를 보고 했다.
ReflectionObject
대상(object)에 대한 정 보 를 보고 하 였 습 니 다.
ReflectionParameter
함수 나 방법 파라미터 에 대한 정 보 를 되 찾 았 습 니 다.
ReflectionProperty
클래스 속성 에 대한 정 보 를 보 고 했 습 니 다.
방문 하 다.
만약 에 하나의 User 를 정의 했다 고 가정 하면 우 리 는 먼저 이러한 반사 류 인 스 턴 스 를 구축 한 다음 에 이 인 스 턴 스 를 바탕 으로 User 의 속성 이나 방법 을 방문 할 수 있 습 니 다.클래스 에서 정 의 된 구성원 권한 성명 이 Public 이 든 아니 든 가 져 올 수 있 습 니 다.
<?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 키 워드 를 사용 하 더 라 도 완전한 네 임 스페이스 를 포함 해 야 합 니 다.그렇지 않 으 면 유형 명 을 찾 지 못 하면 이상 을 던 질 수 있다.상호 작용
반사 류 의 인 스 턴 스 를 만 들 면 우 리 는 반사 류 를 통 해 원래 의 방법 과 속성 을 방문 할 수 있 을 뿐만 아니 라 원래 의 인 스 턴 스 를 만 들 거나 클래스 안의 방법 을 직접 호출 할 수 있다.
$class = new ReflectionClass('Extend\User'); // User , User
$instance = $class->newInstance('youyou', 1, '***'); // User
$instance->setUsername('youyou_2'); // User setUsername
$value = $instance->getUsername(); // User getUsername
echo $value;echo "
"; // youyou_2
$class->getProperty('username')->setValue($instance, 'youyou_3'); // ReflectionProperty username
$value = $class->getProperty('username')->getValue($instance); // ReflectionProperty username
echo $value;echo "
"; // youyou_3
$class->getMethod('setUsername')->invoke($instance, 'youyou_4'); // ReflectionMethod ,
$value = $class->getMethod('getUsername')->invoke($instance); // ReflectionMethod
echo $value;echo "
"; // youyou_4
try {
$property = $class->getProperty('password_1');
$property->setAccessible(true); // $property
$property->setValue($instance, 'password_2'); //
$value = $property->getValue($instance); //
echo $value;echo "
"; // password_2
$class->getProperty('password')->setAccessible(true); // ReflectionProperty
$class->getProperty('password')->setValue($instance, 'password');// ,
$value = $class->getProperty('password')->getValue($instance); // ,
$value = $instance->password; // , , private
}catch(Exception $e){echo $e;}
주의 사항시간 이 있 으 면 반사 류 의 API 표를 정리 하고 상세 한 API 목록 은 먼저 찾 아 볼 수 있 습 니 다공식 문서
여기 서 PHP 반사 메커니즘 사례 에 대한 설명 은 여기까지 입 니 다.더 많은 관련 PHP 반사 메커니즘 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.