web-dev-qa-db-ja.com

グローバル$ post v/s $ GLOBALS ['post']を使う

それはおそらくPHP質問のほうが多いですが、使い方に違いがあるかどうか知りたいのですが。

global $post;
echo $post->ID;

と比較したとき

echo $GLOBALS['post']->ID;

wordPressで投稿のIDにアクセスする。

この[ answer on SOは、最初の方法の方が処理が早く、2番目の方法の方が書き込みが速いことを示しています。

私はまた、最初の方法がCodexで頻繁に言及されているのに対し、2番目の方法は the_content filter ページで言及されていることに気づきました。

これは好みの問題だけですか?それとも、パフォーマンスとセキュリティにも影響しますか?

ありがとう

4
RRikesh

echoだけを使用している場合でも違いはありません。違うのはunset()です。

function test_unset_1()
{
    global $post;
    unset( $post );
}
function test_unset_2()
{
    unset( $GLOBALS['post'] );
}

test_unset_1();
echo $GLOBALS['post']->ID; // will work

test_unset_2();
echo $GLOBALS['post']->ID; // will fail

その理由は、unset()は最初のケースではローカル参照だけを破壊し、2番目のケースでは実際のグローバルオブジェクトを破壊するからです。

読みやすくするために、必ず$GLOBALS['post']を使用してください。変数がどこから来たのかを確認するのは簡単です。

5
fuxia