web-dev-qa-db-ja.com

関数が存在するかどうかを確認する時期

私はWPプラグインの開発を始めたところで、開始する方法として他のプラグインからコードをいくつか読んでいます。以下のコードで、それらの機能の全部または一部をラップするプラグインがいくつかあります。

if(!function_exists('my_function')) {
    function my_function() {
        // a cool function
    }
}

他のプラグインとの名前の衝突を避けるために、このコードですべての関数をラップするのは良い習慣と考えられますか?

ありがとう

2
Robbie

命名の競合を防ぐためにこれを行うことはしません。他の無関係なプラグインが同じ名前を使用している場合、それらが同じ機能を提供してあなたのプラグインが通常通り継続できることはまずあり得ません。後で卑劣ではなく、早めに失敗したいのです。あるいはもちろんより良い接頭辞を付けて衝突を防ぐ:-)

これを行う唯一の理由は、プラガブル関数を作成することです。これは、追加のプラグインによって異なる方法で実装できる独立した機能です。これはWordPressのコアコードで見ることができます:wp_mail()のような関数はプラガブルなので、完全にカスタムのメーリングシステムを使うことができます。

あなたはまた子供のテーマを取得する可能性が高いテーマでこれを参照してください。デフォルトのテーマであるTwemty Elevenとそれ以前のTwenty Tenは、その好例です。子テーマは同じ名前の関数を定義でき、代わりに使用されます。

個人的には、他のコードにフックを提供するというこのアプローチはあまり好きではありません。それらは、どのコードが呼ばれるのかを理解するのを難しくします(私のIDEコード補完は混乱します)。私はすべての拡張ポイントを「古典的な」アクションとフィルタを介して提供しようとしています。

1
Jan Fabry