2013-08-29 5 views
4

Я использую Wordpress и woocommerce (плагин для электронной коммерции) для настройки корзины покупок. В моей functions.php я хранить данные в переменной так:Передать переменную 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; 
} 

Как это сделать?

ответ

6

Вы могли бы сделать переменную глобальной:

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

ли глобальная $ newVar должна быть определена в новой функции? – JCHASE11

+2

простой вопрос ... зачем объявлять $ newVar global, является «глобальной» плохой практикой? и должен быть $ newVar массив? действительно вопрос, чтобы прояснить мои идеи –

+0

@ JCHASE11 да 'global $ newVar' должен быть определен в обеих функциях. Нет, это не плохая практика, необходимо получить переменные в правильном объеме. Вы также можете использовать суперглобалы http://php.net/manual/en/language.variables.superglobals.php. – putvande

4

Любая причина, по которой вы не можете вызвать свою функцию из цикла foreach?

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

Вы должны использовать возвратный переменную $ в ваших функциях:

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

UPDATE:

Глядя на то, что сказал @ChunkyBaconPlz $ newVar должен быть массивом:

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

Это предполагает, что он хочет установить '$ newVar' несколько раз, а затем возвращает только последнюю итерацию' $ newVar', установленную его циклом 'foreach'. – ChunkyBaconPlz

+0

да ... Я не знаю, что он пытался в функции ... только путь –

0

Это вопрос с охватом. Сначала вам нужно создать (создать) $ newVar вне функции. Тогда он будет доступен для просмотра другой функцией.

Вы видите, что область определяет, какие объекты можно увидеть другими объектами. Если вы создадите переменную внутри функции, ее можно будет использовать только внутри этой функции. Как только функция заканчивается, эта переменная устраняется!

Чтобы исправить, буквально просто создайте «$ newVar», прежде чем создавать функцию, и вам должно быть хорошо идти.

+0

Вам все равно нужно сделать var 'global'. – putvande

+0

О, правда? Ха, я этого не знал. Спасибо, я буду помнить об этом! –

0

даже если его определить глобальный ее не работает во время разговора в другой функции, как если бы мы вызывали функцию в другой функции, она, кажется, работает.

<?php 

function one() { 
    global $newVar; 

     $newVar = "hello"; 

} 

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

    echo $newVar; 
} 
two(); 

?>