這篇文章主要介紹了php反射類ReflectionClass用法,結合實例形式較為詳細的分析了php反射類的概念、功能與具體使用方法,需要的朋友可以參考下
本文實例講述了php反射類ReflectionClass用法。分享給大家供大家參考,具體如下:
先來看一段代碼:
| |
interface Iplugin
{
public static
function getName();
}
function findPlugins()
{
$plugins = array();
foreach(get_declared_classes() as $class)
{
$reflectionClass = new ReflectionClass($class);
if ($reflectionClass - > implementsInterface('Iplugin'))
{
$plugins[] = $reflectionClass;
}
}
return $plugins;
}
function computeMenu()
{
$menu = array();
foreach(findPlugins() as $plugin)
{
if ($plugin - > hasMethod('getMenuItems'))
{
$reflectionMethod = $plugin - > getMethod('getMenuItems');
if ($reflectionMethod - > isStatic())
{
$items = $reflectionMethod - > invoke(null);
}
else
{
$pluginInstance = $plugin - > newInstance();
$items = $reflectionMethod - > invoke($pluginInstance);
}
$menu = array_merge($menu, $items);
}
}
return $menu;
}
function computeArticles()
{
$articles = array();
foreach(findPlugins() as $plugin)
{
if ($plugin - > hasMethod('getArticles'))
{
$reflectionMethod = $plugin - > getMethod('getArticles');
if ($reflectionMethod - > isStatic())
{
$items = $reflectionMethod - > invoke(null);
}
else
{
$pluginInstance = $plugin - > newInstance();
$items = $reflectionMethod - > invoke($pluginInstance);
}
$articles = array_merge($articles, $items);
}
}
return $articles;
}
require_once('plugin.php');
$menu = computeMenu();
$articles = computeArticles();
print_r($menu);
print_r($articles);
|
plugin.php 代碼如下:
| |
<?php
class MycoolPugin implements Iplugin
{
public static
function getName()
{
return 'MycoolPlugin';
}
public static
function getMenuItems()
{
return array(array('description' => 'MycoolPlugin', 'link' => '/MyCoolPlugin'));
}
public static
function getArticles()
{
return array(array('path' => '/MycoolPlugin', 'title' => 'This is a really cool article', 'text' => xxxxxxxxx));
}
}
|
上述代碼是php反射類的一個應用。
什么是php反射類,顧名思義,可以理解為一個類的映射。
舉個例子:
| |
class fuc {
static
function ec() {
echo '我是一個類';
}
}
$class=new ReflectionClass('fuc');
|
至於$class 這反射類里有什么東東,可以查看手冊,這里不詳解了
| |
$fuc=$class->newInstance();
$fuc->ec();
|
其中還有一些更高級的用法
| |
$ec=$class->getmethod('ec');
$fuc=$class->newInstance();
$ec->invoke($fuc);
|
上面的過程很熟悉吧。其實和調用對象的方法類似只不過這里是反着來的,方法在前,對象在后
以上就是php反射類ReflectionClass用法實例詳解的詳細內容,更多請關注php中文網其它相關文章!
轉載地址:https://www.php.cn/php-weizijiaocheng-371985.html