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

你不能从这样的函数中调用 vars ......

它应该像

<?
$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 回答