web-dev-qa-db-ja.com

複数回使用する場合は、get_the_id()のような関数を変数に代入するほうが良いでしょうか。

ファイル全体でget_the_ID()を複数回呼び出す場合、get_the_ID()を変数に代入するとパフォーマンスが向上するでしょうか。


// Call get_the_ID() directly
function_that_needs_post_ID( get_the_ID() );    
another_function_that_needs_post_ID( get_the_ID() );

VS

// Assign get_post_ID() to variable
$post_id = get_the_ID();    
function_that_needs_post_ID( $post_id );
another_function_that_needs_post_ID( $post_id);
1
Swen

はい、関数呼び出しの結果をプライベート変数に保存したほうがよいでしょう。しかし、その理由はパフォーマンスではありません。

信頼性

この例では、内部的にグローバル変数にアクセスする関数($post)を呼び出しています。グローバル変数はいつでも上書きされる可能性があります。そのため、2つの呼び出しの間に他のコードによって変数が変更されたため、2つの異なる投稿IDになる可能性があります。

一貫性

関数get_the_ID()は、正の整数またはブール値(false)を返します。それはひどい、なぜならあなたが "ifless"コード のために努力しているならば、あなたは値を整数にキャストすることを強制するか、あるいはあなたはそれぞれの呼び出しの後に何をするべきかを決めなければならないからです。あなたはたくさんの反復コードを手に入れます。

代替実装

関数をクラスのメソッドにしてから、IDをコンストラクタに渡して(または設定して)内部的に保存することをお勧めします。それは静的な依存関係を減らすでしょう、そしてWordPressがこれまでこの部分を変更したとしても、あなたは修正すべきコードを1つだけ持っています。


get_the_ID()のパフォーマンス上の問題はWP_Post::filter()に隠されています。しかし、それはそれほど重要ではありません。無視してかまいません。

4
fuxia