旗下导航:搜·么
当前位置:网站首页 > PHP问题 > 正文

php供应了什么来完成反射【php问题】,php

作者:搜教程发布时间:2019-11-27分类:PHP问题浏览:69评论:0


导读:就算是类成员定义为private也能够在外部接见,不必竖立类的实例也能够接见类的成员和要领。PHP自5.0版本今后增加了反射机制,它供应了一套壮大的反射API,许可...
就算是类成员定义为private也能够在外部接见,不必竖立类的实例也能够接见类的成员和要领。

PHP自5.0版本今后增加了反射机制,它供应了一套壮大的反射API,许可你在PHP运转环境中,接见和运用类、要领、属性、参数和解释等,其功用非常壮大,常常用于高扩大的PHP框架,自动加载插件,自动生成文档,以至能够用来扩大PHP言语。(引荐进修:PHP编程从入门到通晓)

因为它是PHP內建的oop扩大,为言语自身自带的特征,所以不须要分外增加扩大或许设置就能够运用。

PHP反射API会基于类,要领,属性,参数等保护响应的反射类,已供应响应的挪用API。

接见

假定定义了一个类 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 关键字。不然找不到类名会抛出非常。

以上就是php供应了什么来完成反射的细致内容,更多请关注ki4网别的相干文章!

标签:php


欢迎 发表评论: