ホームページ  >  記事  >  バックエンド開発  >  リフレクションを使用してPHPにプラグインメカニズムを実装する方法

リフレクションを使用してPHPにプラグインメカニズムを実装する方法

墨辰丷
墨辰丷オリジナル
2018-06-12 15:18:151130ブラウズ

この記事では、主にリフレクションを使用してプラグイン メカニズムを実装する PHP の方法を紹介します。PHP リフレクション メカニズムとプラグイン実装スキルが必要な場合は、次の例を参照してください。この記事では、リフレクションを使用して PHP メソッドにプラグイン メカニズムを実装する方法について説明しています。具体的な実装方法は次のとおりです。

コードは次のとおりです。

<?php
/**
 * @name    PHP反射API--利用反射技术实现的插件系统架构
 */   
interface Iplugin{   
    public static function getName();   
}   
function findPlugins(){   
    $plugins = array();   
    foreach (get_declared_classes() as $class){   
        $reflectionClass = new ReflectionClass($class);   
        if ($reflectionClass->implementsInterface(&#39;Iplugin&#39;)) {   
            $plugins[] = $reflectionClass;   
        }   
    }   
    return $plugins;   
}   
function computeMenu(){   
    $menu = array();   
    foreach (findPlugins() as $plugin){   
        if ($plugin->hasMethod(&#39;getMenuItems&#39;)) {   
            $reflectionMethod = $plugin->getMethod(&#39;getMenuItems&#39;);   
            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(&#39;getArticles&#39;)) {   
            $reflectionMethod = $plugin->getMethod(&#39;getArticles&#39;);   
            if ($reflectionMethod->isStatic()) {   
                $items = $reflectionMethod->invoke(null);   
            } else {   
                $pluginInstance = $plugin->newInstance();   
                $items = $reflectionMethod->invoke($pluginInstance);   
            }   
            $articles = array_merge($articles,$items);   
        }   
    }   
    return $articles;   
}   
class MycoolPugin implements Iplugin {   
    public static function getName(){   
        return &#39;MycoolPlugin&#39;;   
    }   
    public static function getMenuItems(){   
        return array(array(&#39;description&#39;=>&#39;MycoolPlugin&#39;,&#39;link&#39;=>&#39;/MyCoolPlugin&#39;));   
    }   
    public static function getArticles(){   
        return array(array(&#39;path&#39;=>&#39;/MycoolPlugin&#39;,&#39;title&#39;=>&#39;This is a really cool article&#39;,&#39;text&#39;=> &#39;xxxxxxxxx&#39; ));   
    }   
}
$menu = computeMenu();   
$articles    = computeArticles();   
print_r($menu);   
print_r($articles);

概要

: 以上がこの記事の全内容です。ご参考になれば幸いです。みんなの学びに。 関連する推奨事項:

php は中国のプロキシ サーバー ネットワークの収集を実現します

php 変数の決定と動的定義

PHP は単純な GET、POST、Cookie、Session およびその他の関数を実装します

以上がリフレクションを使用してPHPにプラグインメカニズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。