将在一个函数中创建的PHP变量传递给另一个

时间:2013-08-29 17:47:34

标签: php wordpress function variables

我正在使用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;
}

我该怎么做?

5 个答案:

答案 0 :(得分:7)

您可以将变量设为全局:

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);

答案 1 :(得分:4)

你为什么不能在foreach循环中调用你的函数?

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

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

答案 3 :(得分:0)

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

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

所以要修复,只需在创建函数之前创建“$ newVar”,你应该很高兴。

答案 4 :(得分:0)

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

<?php

function one() {
    global $newVar;

        $newVar = "hello";

}

function two() {
    one();
    global $newVar;

    echo $newVar;
}
 two();

?>