Мне нужно объявить кучу переменных в функции на основе данных, которые зацикливаются с использованием foreach
с оператором switch
с другим foreach
. Я думаю, что я не понимаю рамки переменных, которые я использую, любая помощь будет отличной.PHP задает переменную в функции внутри переключателя внутри foreach
class Users {
public function createUserData(){
$user = $this->getUserData(); //not shown function
$this->createFullDataSet($user);
}
private function createFullDataSet($user){
foreach($user['meta'][0] as $key => $value) {
//variables required later
$entity_def_id = 0;
$entity_id = 0;
$data_def_id = 0;
$user_id = 0;
//thats plenty, you get the idea
switch($key){
case "id":
//set $user_id to use later
$user_id = $value; // <<-- DOESN'T WORK, only works within the case
break;
case "email":
case "username":
case //lots of other cases...
break;
case "location":
case "hometown":
case "something":
//for the last three, the data structure is the same, good test case
//foreach starts when certain conditions met, irrelevant for question
foreach($value as $data_key => $data_value){
$data_type = 'string';
if(is_numeric($data_value)
$data_type = 'integer';
$data_def_id = $this->createDataDef(some $vars); //returns an ID using $pdo->lastInsertId(); (works as has echo'd correctly, at least within this case)
$this->createSomethingElse //with variables within this foreach, works
}
break;
} //end of switch
$this->createRelation($data_def_id); // <<-- DOESN'T WORK!! Empty variable
}
}
private function createRelation($data_def_id){
// something awesome happens!
}
}
Как видно из приведенного выше кода, я хочу использовать переменную вне заявление переключателя, хотя он должен быть объявлен в foreach
->switch
->foreach
из-за существующей структуры данных (эти данные структура - это боль, и поэтому это нужно сделать, прежде чем кто-либо спросит: «Нельзя« просто изменить, чтобы облегчить »).
Теперь я читал на вариабельных областях применения Еогеаспа и переключите заявления (here, here, here и here и пытался найти более), однако ни мудрее, почему $data_def_id
, на старте функция установлена в 0
, не получает сброс до любого значения, входящего во внутреннее значение foreach
. Я пытаюсь избежать использования переменных global
, поскольку некоторые из этих функций будут использоваться в продукте.
мне нужно, чтобы иметь возможность использовать переменные в private function
, на протяжении всей частной функции (в том числе foreach
, switch
и т.д.). Что я делаю неправильно и как это исправить?
Вы правы. Имеет смысл объявлять функциональные переменные внутри функции, а не весь класс. Отличная работа. – ferdynator