繁体   English   中英

无法理解一种行为

[英]Can't understand a behaviour

为什么即使我的代码是这样的:

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的值。 它始终打印 - 如果我尝试回显它,并且在“getEm”函数内它表示它是一个未定义的变量。

这是codeigniter框架中的帮助文件。

编辑

哪个仍然给我这个错误:

遇到PHP错误

严重性:注意

消息:未定义的变量:str

文件名:helpers / helper_common_functions_helper.php

行号:15

global $str;

您需要研究变量范围。 函数有自己的作用域,除非你在开始时有global $variable来访问该函数之外的变量。 还请注意,使用全局变量是“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的全局变量听起来像是在惹麻烦。 给它一个更好地反映它属于什么以及它代表什么的名称。 $getValues_Helper_String虽然字符串不多说。 找到名字的一些提示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM