4

function_existsでユーザー定義関数をチェックする必要があるのはなぜですか?内部またはコアのPHP関数は問題ないように見えますが、ユーザーが自分で関数を知っていて定義している場合、なぜその存在を確認する必要があるのでしょうか。

以下はカスタムユーザー定義関数です

if( !function_exists( 'bia_register_menu' ) ) {
    function bia_register_menu() {
        register_nav_menu('primary-menu', __('Primary Menu'));
    }
    add_action('init', 'bia_register_menu');
}

ありがとう

4

5 に答える 5

3

同じ関数を2回登録しないように注意してください。これにより、エラーが発生します。

if(function_exists('function_name'))プラグインで定義された関数を呼び出すときにも使用します。プラグインを無効にしても、サイトは引き続き機能します。

于 2013-01-29T13:37:11.140 に答える
1

オートローダーを使用して動的にロードされたファイルでは、関数またはクラスを含むファイルがロードされていない可能性があるため、存在するかどうかを確認する必要があります

于 2013-01-29T13:25:07.223 に答える
0

URLを使用して関数名を取得し、それを呼び出すと想像してください。次に、次の情報があります。

url: http: //mysite.com/my/page/

このURLを関数名に変換するときは、次のようにします。

implode('_', $myUrlPart); //my_page

出力は文字列として「my_page」になります。ただし、これをすぐに呼び出して関数が存在しない場合は、エラーが表示されます。これがfunction_existsの出番です。見てみましょう。

if (function_exists($function_name)) {
    $function_name();  //the function is called
} else {
    //call other function to show HTTP 404 page or something like that
}

これで少しわかりやすくなりますか?

于 2013-01-29T13:27:50.687 に答える
0

Wordpress StackExchangeに関するこの回答は、テーマif function_existsの関数宣言の周りで使用する必要がある理由を明確にしています。

if function_existsアプローチでは、関数自体を定義するだけで、子テーマが関数定義をオーバーライドできます。子テーマのfunctions.phpファイルが最初に読み込まれるため、最初に関数が定義され、親の定義は読み込まれません。

protectedオブジェクト指向言語のキーワードに似ていると思います。

しかし、プラグインの関数宣言の周りにそれが必要になるかどうかはまだ疑問です。

于 2014-01-03T17:03:59.083 に答える
-1

WordPressの設計は非常に貧弱であるため、そのようなモジュールを自動ロードするための適切なメカニズムがないため、セーフガードを追加する必要があります。

于 2013-01-29T13:25:29.510 に答える