无法理解行为

| 为什么即使我的代码是这样的:
if ( ! function_exists(\'get_values\')){
    global $str;
    function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
            $totalPares = $tpar;
            $ventasPiso = $vpiso;
            $totalComisiones = $tcomi;
            $totalGastos = $tgas;
            $totalTotal = $ttotal;
            $str = $totalPares . \",\" . $ventasPiso . \",\" . $totalComisiones . \",\" . $totalGastos . \",\" . $totalTotal;
            return $str;
    }

    function getEm(){
        return $str;
    }
}
我无法覆盖$ str的值。如果我尝试回显它,它总是打印出“ a”,并且在“ getEm”函数中它表示它是未定义的变量。 这是codeigniter框架中的帮助文件。 编辑 这仍然给我这个错误:   遇到PHP错误      严重程度:注意      消息:未定义的变量:str      文件名:   helpers / helper_common_functions_helper.php      行号:15     
已邀请:
        
global $str;
您需要研究变量范围。函数有其自身的作用域,除非您一开始有ѭ2to来访问该函数之外的变量。另请注意,使用全局变量是“ nono”,应不惜一切代价避免使用。
function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
        global $str;
        $totalPares = $tpar;
        $ventasPiso = $vpiso;
        $totalComisiones = $tcomi;
        $totalGastos = $tgas;
        $totalTotal = $ttotal;
        $str = $totalPares . \",\" . $ventasPiso . \",\" . $totalComisiones . \",\" . $totalGastos . \",\" . $totalTotal;
        return $str;
}
    
        如果要使状态保持在一定范围内,则应使用该类。不推荐
global
class MyClass {
  private $str = \"a\";

  public function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
        $totalPares = $tpar;
        $ventasPiso = $vpiso;
        $totalComisiones = $tcomi;
        $totalGastos = $tgas;
        $totalTotal = $ttotal;
        $str = $totalPares . \",\" . $ventasPiso . \",\" . $totalComisiones . \",\" . $totalGastos . \",\" . $totalTotal;
        return $str;
  }

  public function getEm(){
    return $this->str;
  }
}
然后,您需要实例化该类,然后才能使用它(当然),但是请保持范围整洁
$x = new MyClass;
echo $x->getEm();
如果仅使用静态属性和方法创建类,则无需实例化(
MyClass:getEm()
)。     
        全局变量看起来放错了位置,也许这​​会有所帮助:
if ( ! function_exists(\'get_values\')){
    function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
        global $str; ##### <- place it here
            $totalPares = $tpar;
            $ventasPiso = $vpiso;
            $totalComisiones = $tcomi;
            $totalGastos = $tgas;
            $totalTotal = $ttotal;
            $str = $totalPares . \",\" . $ventasPiso . \",\" . $totalComisiones . \",\" . $totalGastos . \",\" . $totalTotal;
            return $str;
    }

    function getEm(){
        global $str; ##### <- place it here
        return $str;
    }
}
旁注:我真的不知道codeigniter的设计水平如何,但是使用名为
$str
的全局变量对我来说听起来像是在问麻烦。给它起一个更好地反映其所属名称和含义的名称。 string10ѭ尽管弦说不多。查找名称的一些技巧。     

要回复问题请先登录注册