函数返回false - 但我确定它应该是真的

时间:2013-02-06 02:03:33

标签: php string function if-statement

我有这个字符串:

$currentpath = basename(__FILE__);

如果我写

echo $currentpath;

返回navleft.php

现在我的职能:

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

但如果我调用该函数

colorButton();

我总是得到navbuttonoff。

为什么会这样?

3 个答案:

答案 0 :(得分:4)

您需要了解variable scope$currentpath无法使用colorButton,除非您将其作为参数传递(或使用global等恶意内容):

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变量的本地版本,并且尚未在此范围内为其分配值。

答案 1 :(得分: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

答案 2 :(得分: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);