PHP 物件導向 (十一)反射類

一句話兒發表於2020-01-18

原理:透過反射類,可以知道一切類資訊,從而實現更加健壯的程式碼

作用:

  1. 寫底層框架
  2. 擴充套件類功能
  3. 管理大量未知類
<?php
namespace Extend;

use ReflectionClass;
use Exception;

class User{
    const ROLE = 'Students';
    public $username = '';
    private $password = '';
    public function __construct($username, $password)
    {
        $this->username = $username;
        $this->password = $password;
    }

    public function getUsername()
    {
        return $this->username;
    }

    public function setUsername($username)
    {
        $this->username = $username;
    }

    private function getPassword()
    {
        return $this->password;
    }

    private function setPassowrd($password)
    {
        $this->password = $password;
    }
}

$class = new ReflectionClass('Extend\User');  // 將類名User作為引數,即可建立User類的反射類

echo '將類名User作為引數,即可建立User類的反射類';echo "<br/>";

echo "<pre>";var_dump($class);echo "</pre>";echo "<br/>";

$properties = $class->getProperties();  // 獲取User類的所有屬性,返回ReflectionProperty的陣列

echo '獲取User類的所有屬性,返回ReflectionProperty的陣列';echo "<br/>";

echo "<pre>";var_dump($properties);echo "</pre>";echo "<br/>";

$property = $class->getProperty('password'); // 獲取User類的password屬性ReflectionProperty

echo '獲取User類的password屬性ReflectionProperty';echo "<br/>";

echo "<pre>";var_dump($property);echo "</pre>";echo "<br/>";

$methods = $class->getMethods();   // 獲取User類的所有方法,返回ReflectionMethod陣列

echo '獲取User類的所有方法,返回ReflectionMethod陣列';echo "<br/>";

echo "<pre>";var_dump($methods);echo "</pre>";echo "<br/>";

$method = $class->getMethod('getUsername');  // 獲取User類的getUsername方法的ReflectionMethod

echo '獲取User類的getUsername方法的ReflectionMethod';echo "<br/>";

echo "<pre>";var_dump($method);echo "</pre>";echo "<br/>";

$constants = $class->getConstants();   // 獲取所有常量,返回常量定義陣列

echo '獲取所有常量,返回常量定義陣列';echo "<br/>";

echo "<pre>";var_dump($constants);echo "</pre>";echo "<br/>";

$constant = $class->getConstant('ROLE');   // 獲取ROLE常量

echo '獲取ROLE常量';echo "<br/>";

echo "<pre>";var_dump($constant);echo "</pre>";echo "<br/>";

$namespace = $class->getNamespaceName();  // 獲取類的名稱空間

echo '獲取類的名稱空間';echo "<br/>";

echo "<pre>";var_dump($namespace);echo "</pre>";echo "<br/>";

$comment_class = $class->getDocComment();  // 獲取User類的註釋文件,即定義在類之前的註釋

echo '獲取User類的註釋文件,即定義在類之前的註釋';echo "<br/>";

echo "<pre>";var_dump($comment_class);echo "</pre>";echo "<br/>";

$comment_method = $class->getMethod('getUsername')->getDocComment();  // 獲取User類中getUsername方法的註釋文件

echo '獲取User類中getUsername方法的註釋文件';echo "<br/>";

echo "<pre>";var_dump($comment_class);echo "</pre>";echo "<br/>";

複製程式碼,即可執行。 謝謝你的瀏覽,如有錯誤,歡迎指正哈!!!

本作品採用《CC 協議》,轉載必須註明作者和本文連結
寫的不好,就當是整理下思緒吧。

相關文章