Использование переменных переменных в PHP на классах (CodeIgniter) - PullRequest
0 голосов
/ 07 декабря 2011

Я использую PHP с CodeIgniter. Мое приложение должно выводить отформатированные адреса по всему сайту, извлеченные из MySQL. В некоторых случаях address_1 может быть пустым или может быть заполнено, в других случаях postcode может присутствовать или отсутствовать, и т. Д. Я написал вспомогательную функцию, которая аккуратно форматирует эти адреса при передаче набора результатов MySQL.

Проблема в том, что из-за размера и сложности сайта в некоторых местах мне нужно использовать эту функцию с несколькими адресами в одном наборе результатов, а в других местах я могу передать результаты как $query->row('address_1') или как $row->address_1.

Я написал свою функцию так:

// Get every element from the MySQL Resultset       
            if(method_exists($address, 'row'))
            {
                $a['abode']         = ($address->row($prefix.'abode')         ? $address->row($prefix.'abode') : '');
                $a['building_no']   = ($address->row($prefix.'building_no')   ? $address->row($prefix.'building_no') : ''); 
                $a['building_name'] = ($address->row($prefix.'building_name') ? $address->row($prefix.'building_name') : '');
                $a['office_number'] = ($address->row($prefix.'office_number') ? $address->row($prefix.'office_number') : '');
                $a['address_1']     = ($address->row($prefix.'address_1')     ? $address->row($prefix.'address_1') : '');
                $a['address_2']     = ($address->row($prefix.'address_2')     ? $address->row($prefix.'address_2') : '');
                $a['town']          = ($address->row($prefix.'town')          ? $address->row($prefix.'town') : '');
                $a['county']        = ($address->row($prefix.'county')        ? $address->row($prefix.'county') : '');
                $a['postcode']      = ($address->row($prefix.'postcode')      ? $address->row($prefix.'postcode') : '');
                $a['country']       = ($address->row($prefix.'country')       ? $address->row($prefix.'country') : '');
            }
            else
            {
                // PHP Variable Variables
                $a['abode']         = (isset($address->{$prefix.'abode'})           ? $address->{$prefix.'abode'}: '');     
                $a['building_no']   = (isset($address->{$prefix.'building_no'})     ? $address->{$prefix.'building_no'} : '');
                $a['building_name'] = (isset($address->{$prefix.'building_name'})   ? $address->{$prefix.'building_name'} : '');
                $a['office_number'] = (isset($address->{$prefix.'office_number'})   ? $address->{$prefix.'office_number'} : '');
                $a['address_1']     = (isset($address->${$prefix.'address_1'})      ? $address->${$prefix.'address_1'} : '');
                $a['address_2']     = (isset($address->{$prefix.'address_2'})       ? $address->{$prefix.'address_2'} : ''); 
                $a['town']          = (isset($address->{$prefix.'town'})            ? $address->{$prefix.'town'} : ''); 
                $a['county']        = (isset($address->{$prefix.'county'})          ? $address->{$prefix.'county'} : ''); 
                $a['postcode']      = (isset($address->{$prefix.'postcode'})        ? $address->{$prefix.'postcode'} : ''); 
                $a['country']       = (isset($address->{$prefix.'country'})         ? $address->{$prefix.'country'} : '');
            }

Как вы видите, я немного "экспериментировал" с $a['address_1'] оператора else, пытаясь найти комбинацию, которая сработала.

Я пытаюсь заставить работать оператор else, но PHP не выдает никаких ошибок или чего-либо еще, кроме строки $a['address_1'], в которой говорится:

Message: Undefined variable: app_address_1, Filename: helpers/address_helper.php.

Моя $prefix переменная установлена ​​на app_, но это не работает. Почему?

1 Ответ

1 голос
/ 08 декабря 2011

Внимательно посмотрите на эту строку:

$a['address_1']     = (isset($address->${$prefix.'address_1'})      ? $address->${$prefix.'address_1'} : '');

Вы видите то, что я вижу?

$address->${$prefix.'address_1'} 
----------^

У вас есть избыток $ там!Ошибка в том, что он пытается найти значение переменной с именем app_address_1, которая является результатом $prefix.'address_1'.

Давайте оценим пошагово:

$address->${$prefix.'address_1'}
$address->${'app_address_1'}
$address->{$app_address_1}
$address->{NULL}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...