【问题标题】:How can I access a variable inside another function?如何访问另一个函数中的变量?
【发布时间】:2014-10-02 04:54:45
【问题描述】:

我有两个函数可以打印一些值。我需要在第二个函数中使用变量 $mv。但是,$mv 只能在第一个函数中定义。我尝试了所有类型的 PHP 全局示例,但没有一个允许 $mv 变量在第二个函数中使用、可见或可访问。

 function printMobilePrev(&$mobileprevresults) {
       if (count($mobileprevresults->getRows()) > 0) {




    $mv = $mobileprevRows[0][0];

    $mobileprevRows = $mobileprevresults->getRows();

    echo '<p>Previous period (sessions): '.$mobileprevRows[0][0].'..............................';


  } else {
    print '<p>No results found.</p>';
  }

}


function printMobileCurr(&$mobilecurrresults) {
   if (count($mobilecurrresults->getRows()) > 0) {



    $mobdiff = ($mobcur - $mv);

    $mobpctchg = ($mobdiff / $mobprev) * 100;

    $mobilecurrRows = $mobilecurrresults->getRows();


     echo '<p>Previous period (sessions): '.$mobileprevRows[0][0].'..............................';
     echo '<p>Previous period (sessions): '.$mv.'..............................';
     echo '<p>Current period (sessions): '.$mobilecurrRows[0][0].'..............................';

    if ($mobdiff > 0){

        echo '<p>Percent increase: '.$mobpctchg.'..............................';
    } else {
        echo '<p>Percent decrease: '.$mobpctchg.'..............................';
    }      

  } else {
    print '<p>No results found.</p>';
  }

}

【问题讨论】:

    标签: php variables global


    【解决方案1】:

    您可以使用global scope

    这就是你想要做的:

    $mv = 0;
    
    function function1()
    {
        global $mv;
        $mv = 'whatever';
        //code
    }
    
    function function2()
    {
        global $mv;
        // use $mv;
    }
    

    【讨论】:

    • 第一个 global $mv; 什么都不做
    【解决方案2】:

    您必须在任何函数之外预定义该变量,然后您可以使用 Global 将其传递给任何函数。

    【讨论】:

    • 不需要在外面定义。它只需要在使用它的函数中包含 global 关键字,即使它已在那里初始化。或者更好的$GLOBALS['mv'] 或者更好的是仍然从第一个返回并传递给第二个。
    【解决方案3】:

    您可以通过引用传递它。例如

    function doSomething(&$mv) {
       $mv = 1;
    }
    
    function doSomethingElse($mv) {
       return $mv;
    }
    
    $mv = 0;
    doSomething($mv);
    echo doSomethingElse($mv); //Output: 1
    

    【讨论】:

      【解决方案4】:

      您可以在打印后返回 $mv 并将其保存在 var 中以传递给下一个函数:

      $printMobilePrev = printMobilePrev();
      
      function printMobilePrev(&$mobileprevresults) {
      
         $mv = $mobileprevRows[0][0];
      
         ...
          print '<p>No results found.</p>';
          return $mv;
         ...
      
      }
      
      $printMobileCurr = printMobileCurr(&$mobilecurrresults,$mv);
      
      function printMobileCurr(&$mobilecurrresults,$mv) {
           ......
      }
      

      【讨论】:

        【解决方案5】:

        您很可能必须正确使用全局变量。

        在为你的第一个函数赋值之前将你的 $mv 变量声明为全局变量

        global $mv;
        $mv = $mobileprevRows[0][0];
        

        在使用第二个函数之前在开始时使用 global

        function printMobileCurr(&$mobilecurrresults) {
        if (count($mobilecurrresults->getRows()) > 0) {
        global $mv;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-06
          • 2022-01-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多