0

私はこの文字列を持っています:

$currentpath = basename(__FILE__);

私が書くなら

echo $currentpath;

navleft.php を返します

今私の機能:

function colorButton() {
    if($currentpath == "navleft.php") {
        echo "navbuttonon";
    } else {
        echo "navbuttunoff";
    }
}

しかし、関数を呼び出すと

colorButton();

私はいつもnavbuttonoffを取得します。

これはなぜですか?

4

3 に答える 3

4

変数のスコープについて学ぶ必要があります。パラメータとして渡さない限り(またはのような邪悪なものを$currentpath使用しない限り)は利用できません:colorButtonglobal

function colorButton($currentpath) {
if($currentpath == "navleft.php") {
    echo "navbuttonon";
} else {
    echo "navbuttunoff";
}
}

マニュアルの完璧な例:

<?php
$a = 1; /* global scope */ 

function test()
{ 
    echo $a; /* reference to local scope variable */ 
} 

test();
?>

echo ステートメントは $a 変数のローカル バージョンを参照し、このスコープ内の値が割り当てられていないため、このスクリプトは出力を生成しません。

于 2013-02-06T02:05:09.683 に答える
0

次のいずれかが必要です。

1.グローバルを使用する

function colorButton() {
    global $currentpath;

    if($currentpath == "navleft.php") {
        echo "navbuttonon";
    } else {
        echo "navbuttunoff";
    }
}

または、より良い解決策:

2.パスを引数として渡す

function colorButton($currentpath) {

    if($currentpath == "navleft.php") {
        echo "navbuttonon";
    } else {
        echo "navbuttunoff";
    }
}

colorButton($currentpath);

知っておくべきこと:

http://php.net/manual/en/language.variables.scope.php

于 2013-02-06T02:05:36.767 に答える
0

このような関数から変数を呼び出すことはできません...

次のようになるはずです

<?
$currentpath = 'navleft.php';
function colorButton() {

  global $currentpath;

  if($currentpath == "navleft.php") {
    echo "navbuttonon";
  } else {
    echo "navbuttunoff";
  }
}
colorButton();

またはこのように

<?
$currentpath = 'navleft.php';
function colorButton($currentpath) {

  if($currentpath == "navleft.php") {
    echo "navbuttonon";
  } else {
    echo "navbuttunoff";
  }
}
colorButton($currentpath);
于 2013-02-06T02:07:34.103 に答える