Передайте переменную PHP, созданную в одной функции, другой

Я использую 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; } 

Как я могу это сделать?

Вы можете сделать переменную global:

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

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

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

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

 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 вне функции. Тогда он будет доступен для просмотра другой функцией.

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

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

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

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