Передача переменной в ее родительскую функцию в PHP?

У меня есть функция w / в функции, и мне нужна внутренняя функция, чтобы сделать ее переменными доступными в области родительской функции, например:

function sayMyName(){ getName(); // inner function generates $name value echo $name; // use $name } sayMyName(); 

Я мог бы просто просто глобализовать вещи в обеих функциях … Но моя ситуация намного сложнее и обрабатывает больше переменных и глобализация каждого из них немного утомительна.

Благодарю.

PS Я заметил много предложений «возвращения». извините, я wasnt ясно, мне нужно вернуть больше переменных .. не простой возврат. Спасибо, парни

Вы можете использовать $_GLOBALS , но это «плохая практика». Так,


1: Использовать return :

 <?php function getName(){ $name = 'Smith'; return $name; } function sayMyName(){ $name = getName(); echo $name; } sayMyName(); ?> 

Показывает:

 Smith 

2: Использовать references :

 <?php function getName(&$name){ $name = 'Smith'; } function sayMyName(){ getName($name); echo $name; } sayMyName(); ?> 

Показывает:

 Smith 

3: Возвращаемый array для нескольких переменных:

 <?php function getName(){ $surname = 'Smith'; $name = 'John'; return array($surname, $name); } function sayMyName(){ list($surname, $name) = getName(); echo $name, ' ', $surname; } sayMyName(); ?> 

Показывает:

 John Smith 

4. Вернуть пользовательский object для нескольких переменных:

 <?php function getName(){ $surname = 'Smith'; $name = 'John'; $buffer = new stdClass(); $buffer->name = $name; $buffer->surname = $surname; return $buffer; } function sayMyName(){ $obj = getName(); echo $obj->name, ' ', $obj->surname; } sayMyName(); ?> 

Показывает:

 John Smith 

5. Используйте anonymous function с use инструкции и references :

 <?php function sayMyName(){ $surname = $name = 'Unknown'; $temp = function() use (&$name, &$surname){ $surname = 'Smith'; $name = 'John'; }; $temp(); echo $name, ' ', $surname; } sayMyName(); ?> 

Показывает:

 John Smith 

сделай это

 function sayMyName(){ $name = getName(); // inner function generates $name value echo $name; // results will be returned } sayMyName(); 

Я надеюсь, что ваша внутренняя функция возвращает имя, подобное этому

 function getName(){ return $name; } 

то он будет работать

Это то, для чего предназначалось объектно-ориентированное программирование . Если многие функции должны совместно использовать переменные, лучше всего их инкапсулировать в класс следующим образом:

 class WhateverDescibestYourViewOfTheWorld { protected $name; function __construct( $name) { $this->name = $name; } function GetName() { return $this->name; } function SayName() { echo $this->name; } } // And use it: $o = new WhateverDescibestYourViewOfTheWorld(); ... $o->SayName(); 

Или вы можете создать класс, который будет использоваться только как контейнер данных:

 class DataContainer { public $name; public $address; // ... } // By reference this will modify object previously created function GetProperties( &$dataContainer) // Note that & isn't necessary since PHP5 { $dataContainer->name = "..."; } $c = new DataContainer(); GetProperties($c); 

Или вы можете упростить это и использовать массив:

 function GetProperties( array &$dataContainer) { $dataContainer['name'] = '...'; } $data = array(); GetProperties($data); 

Как сначала назначить возвращаемое значение getName () переменной?

 $name = getName(); 

Если вам нужна только одна переменная, вы можете сделать это

 function getName(){ // Some code return 'my name is XXX'; } function sayMyName(){ $name = getName(); // inner function generates $name value echo $name; // results to undefined } sayMyName(); 

В противном случае вы можете использовать класс: http://www.php.net/manual/en/language.oop5.php

Вы можете использовать ссылки

  $param = "aaa"; function f(&$param) { //dostuff inner($param); echo $param; } function inner(&$inner) { //do other stuff } 

или использовать возвращаемое значение

  function f() { echo inner(); } function inner($param) {return $param;} 

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

http://php.net/manual/en/language.references.php

лучший способ был бы с классом

 <?php class Person { private $name; public function setName($name){ $this->name = $name;} public function sayName() {echo $this->name;} } $person = new Person(); $person->setName("Robert"); $person->sayName(); 

Это хороший способ сделать это в ООП.

То, что вы думаете, неверно, однако вы можете вернуть массив значений. Например:

 function sayMyName() { $result = getName(); // inner function creates an array echo $result['name']; } 

или лучше объект:

 class Results { public $name; } function sayMyName() { $result = getName(); // inner function creating an object echo $result->name; } 

Вы также можете сделать это, как показано ниже.

 $name = ""; function sayMyName(){ getName(); // inner function generates $name value //set $name variable inside getName() function. echo $name; // results to undefined } sayMyName(); 

Пожалуйста, используйте следующий код, он решит вашу проблему

 global $var; 

Вы можете использовать его в любом месте вашего php-диапазона.