0

同様の質問が投稿されていますが、答えを見つけることができませんでした。

このIFステートメントは、それ自体で正しく機能します。

$subject_id_top = "case studies";
if($subject_id_top == "case studies") {echo "active";} 

しかし、このIFステートメントを関数内に挿入すると、機能しません。

<style>

.active {
color:#F00;
}
</style>


<?php 
$subject_id_top = "case studies";

function menu_active() {
 if($subject_id_top == "case studies") {echo "active";} 
}


<a class="<?php menu_active(); ?>" href="#">Case Studies</a>
?>

これは非常に基本的な問題のようですが、私の一生の間、私はそれを理解することができませんでした。コミュニティの助けは素晴らしいでしょう。前もって感謝します。

4

1 に答える 1

1

$subject_id_top関数内は関数$subject_id_topのスコープ外(グローバルスコープ)を参照するため、いわば次のステートメントを使用して「インポート」する必要があります。

global $subject_id_top;

その場合、関数は次のようになります。

function menu_active() {
    global $subject_id_top;
    if($subject_id_top == "case studies") {echo "active";} 
}

ただし、このように範囲外の情報に依存することは、通常は望ましくありません。たとえば、次のように、関数をリファクタリングして、この動作を回避するための引数を受け入れることができます。

function menu_active( $subject_id_top ) {
    if($subject_id_top == "case studies") {echo "active";} 
}

$subject_id_top次に、グローバルスコープから引数としてその関数を呼び出します。

<?php menu_active( $subject_id_top ); ?>
于 2013-03-26T01:16:25.590 に答える