【问题标题】:Pass PHP variable created in one function to another将一个函数中创建的 PHP 变量传递给另一个函数
【发布时间】:2013-09-02 06:51:43
【问题描述】:

我正在使用 wordpress 和 woocommerce(电子商务插件)来自定义购物车。在我的functions.php中,我将数据存储在一个变量中,如下所示:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $newVar = $value['data']->price;
    }
}

我需要能够在不同的函数中使用$newVar,这样我才能在页面的不同区域回显结果。例如,如果我有以下函数,我将如何在其中使用$newVar

add_action( 'another_area', 'function_name' );

function function_name() {
    echo $newVar;
}

我该怎么做?

【问题讨论】:

    标签: php wordpress function variables


    【解决方案1】:

    您可以将变量设为全局变量:

    function add_custom_price( $cart_object ) {
        global $newVar;
        foreach ( $cart_object->cart_contents as $key => $value ) {
            $newVar = $value['data']->price;
        }
    }
    
    function function_name() {
        global $newVar;
        echo $newVar;
    }
    

    或者,如果$newVar 已经在全局范围内可用,您可以这样做:

    function function_name($newVar) {
        echo $newVar;
    }
    
    // Add the hook
    add_action( 'another_area', 'function_name' );
    
    // Trigger the hook with the $newVar;
    do_action('another_area', $newVar);
    

    【讨论】:

    • 新函数中是否需要定义全局$newVar?
    • 一个简单的问题...为什么声明 $newVar 全局,global 是一个不好的做法?应该是 $newVar 一个数组吗?这是一个澄清我的想法的真正问题
    • @JCHASE11 yes global $newVar 需要在两个函数中定义。不,这不是一个坏习惯,有必要在正确的范围内获取变量。你也可以使用超全局变量php.net/manual/en/language.variables.superglobals.php
    【解决方案2】:

    为什么不能从 foreach 循环中调用函数?

    function add_custom_price( $cart_object ) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
            $newVar = $value['data']->price;
            function_name($newVar);
        }
    }
    

    【讨论】:

      【解决方案3】:

      你应该在你的函数中使用 return $variable:

      function add_custom_price( $cart_object ) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
          $newVar = $value['data']->price;
        }
        return $newVar;
      }
      
      function function_name($newVar) {
      //do something with $newVar
      }
      

      并像这样使用:

      $variable = add_custom_price( $cart_object );
      
      $xxx = function_name($variable);
      

      更新:

      看看@ChunkyBaconPlz 说的 $newVar 应该是一个数组:

      function add_custom_price( $cart_object ) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
          $newVar[] = $value['data']->price;
        }
        return $newVar;
      }
      

      【讨论】:

      • 这是假设他想多次设置$newVar,然后只返回他的foreach循环设置的$newVar的最后一次迭代。
      【解决方案4】:

      即使它定义的全局在调用其他函数时不起作用但是如果我们在其他函数中调用函数它似乎正在工作。

      <?php
      
      function one() {
          global $newVar;
      
              $newVar = "hello";
      
      }
      
      function two() {
          one();
          global $newVar;
      
          echo $newVar;
      }
       two();
      
      ?>
      

      【讨论】:

        【解决方案5】:

        这是一个范围问题。您需要先在函数之外实例化(创建)$newVar。然后,您的其他功能将可以查看它。

        你看,范围决定了哪些对象可以被其他对象看到。如果您在函数中创建变量,则它只能在该函数中使用。一旦函数结束,那个变量就被消除了!

        因此,要修复,只需在创建函数之前创建“$newVar”即可。

        【讨论】:

        • 您仍然需要创建 var global
        • 哦,真的吗?呵呵,我不知道。谢谢,我会记住的!
        猜你喜欢
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多