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

Posted

技术标签:

【中文标题】将一个函数中创建的 PHP 变量传递给另一个函数【英文标题】:Pass PHP variable created in one function to another 【发布时间】: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;

我该怎么做?

【问题讨论】:

【参考方案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 哦,真的吗?呵呵,我不知道。谢谢,我会记住的!

以上是关于将一个函数中创建的 PHP 变量传递给另一个函数的主要内容,如果未能解决你的问题,请参考以下文章

PHP基础:文件包含,参数和传递,匿名函数

将变量名称传递给另一个函数中的 dplyr 函数会返回找不到对象错误

将变量传递给另一个 JAVA 类中的主函数

将变量传递给另一个页面上的函数

JavaScript 将作用域传递给另一个函数

C ++编译器能否优化使用用于将函数结果传递给另一个函数的虚拟变量?