метод возвратных переменных - PullRequest
0 голосов
/ 15 сентября 2009

Хорошо, у меня есть десять переменных, но одну нужно установить, но мне нужно проверять каждое из значений, пока одно не установлено. Я делаю оператор SWITCH / CASE, но я не уверен, что это лучший подход, потому что я не понимаю, как вернуть только ту переменную, которую мне нужно установить.

$passed_var = 'A'; // Static

$var_array = getSelectedVar($passed_var);

foreach($var_array as $key => $val) {
    echo "Key: " . $key . " VALUE: " . $val . "<br />\n";
}

// How do I assign one of these values?
if(isset($var_1)) {
    echo "Var 1 Set<br />\n";
} elseif(isset($var_2)) {
    echo "Var 2 Set<br />\n";
} elseif(isset($var_3)) {
    echo "Var 3 Set<br />\n";
} elseif(isset($var_4)) {
    echo "Var 4 Set<br />\n";
} elseif(isset($var_5)) {
    echo "Var 5 Set<br />\n";
} elseif(isset($var_6)) {
    echo "Var 6 Set<br />\n";
} elseif(isset($var_7)) {
    echo "Var 7 Set<br />\n";
} elseif(isset($var_8)) {
    echo "Var 8 Set<br />\n";
} elseif(isset($var_9)) {
    echo "Var 9 Set<br />\n";
} elseif(isset($var_10)) {
    echo "Var 10 Set<br />\n";
}

function getSelectedVar($passed_var) {
    $passed_var = strtoupper($passed_var);
    $update_var = array();

    switch ($passed_var) {
        case 'A':
        case 'AB':
        case 'ABC':
        case 'ABCD':
            $update_var_1 = 1;
            $update_var = array('update_var_1'=>'1');
            break;
        case 'B':
        case 'BA':
            $update_var_2 = 1;
            $update_var = array('update_var_2'=>'1');
            break;
        case 'C':
            $update_var_3 =1;
            $update_var = array('update_var_3'=>'1');
            break;
        case 'D':
        case 'DA':
            $update_var_4 =1;
            $update_var = array('update_var_4'=>'1');
            break;
        case 'E':
            $update_var_5 =1;
            $update_var = array('update_var_5'=>'1');
            break;
        case 'F':
            $update_var_6 =1;
            $update_var = array('update_var_6'=>'1');
            break;
        case 'G':
            $update_var_7 = 1;
            $update_var = array('update_var_7'=>'1');
            break;
        case 'H':
        case 'HA':
        case 'HB':
            $update_var_8 =1;
            $update_var = array('update_var_8'=>'1');
            break;
        case 'I':
            $update_var_9 =1;
            $update_var = array('update_var_9'=>'1');
            break;
        case 'J':
        case 'JA':
            $update_var_10 =1;
            $update_var = array('update_var_10'=>'1');
            break;
        default:
            $update_var = '';
    }

    return $update_var;
}

Я слишком усложняю ???

Ответы [ 4 ]

1 голос
/ 15 сентября 2009

Я думаю, что вам здесь нужен массив $ GLOBALS. Например, если вы назначите $ GLOBALS ['var_1'] = 1, то когда вы вернетесь из функции, переменная $ var_1 будет установлена ​​в 1.

0 голосов
/ 15 сентября 2009

Вы устанавливаете переменную в первую очередь? Потому что в этот момент вы знаете, что это такое, и вы могли бы передать некоторые указания относительно того, какая переменная была установлена, вместо того, чтобы возвращать «загадку» коду, который ее вызвал.

0 голосов
/ 15 сентября 2009

Трудно понять, чего вы хотите достичь, но, как я вижу, вы выкидываете свой $ var_array и вы видите что-то вроде

Key: update_var_1 VALUE: 1

А вы хотите обновить переменную $ var_1 на основе этого имени?

Как-то так, с помощью PHP «переменных переменных» будет работать - во-первых, вам нужно получить имя переменной

$varname=str_replace("update_", "", $key);

Тогда вы можете присвоить ему значение

$$varname=$value
0 голосов
/ 15 сентября 2009

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

 // Variable variable example:
 $var_1 = 'test';
 $a = 'var_1';
 echo $$a; // outputs 'test'

 // Reference example:
 $var_1 = 'test';
 $a = &$var_1;
 $a = 'test2';
 echo $var_1; // outputs 'test2'
...