在类上使用PHP中的变量(CodeIgniter)
我正在使用CodeIgniter运行PHP。我的应用程序需要输出整个站点的格式化地址,从MySQL中提取。在某些情况下,在类上使用PHP中的变量(CodeIgniter),php,mysql,codeigniter,variables,Php,Mysql,Codeigniter,Variables,我正在使用CodeIgniter运行PHP。我的应用程序需要输出整个站点的格式化地址,从MySQL中提取。在某些情况下,address_1可能是空的,也可能是填的,在其他情况下,postcode可能在那里,也可能不在那里,等等。我已经编写了一个帮助函数,当传递一个MySQL结果集时,它可以对这些地址进行整齐的格式化 问题是,由于站点的大小和复杂性,在某些地方,我需要在同一结果集中使用多个地址的函数,而在其他地方,我可能会将结果作为$query->row('address_1')或作为$row->
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'} : '');
}
正如您所见,我在else
语句的$a['address\u 1']
上进行了一些“实验”,试图找到一个有效的组合
我正试图让else
语句用例正常工作,但PHP除了$a['address\u 1']
行之外,不会抛出任何错误或任何东西,该行显示:
消息:未定义变量:app\u address\u 1,文件名:helpers/address\u helper.php
My
$prefix
变量设置为app
,但这不起作用。为什么?仔细看那一行:
$a['address_1'] = (isset($address->${$prefix.'address_1'}) ? $address->${$prefix.'address_1'} : '');
你看到我看到的了吗
$address->${$prefix.'address_1'}
----------^
你有多余的$
!错误是因为它试图查找名为app\u address\u 1
的变量的值,该变量是$prefix.'address\u 1'
的结果
让我们一步一步地评估:
$address->${$prefix.'address_1'}
$address->${'app_address_1'}
$address->{$app_address_1}
$address->{NULL}
$address->{$prefix.'address_1'}
应该可以正常工作。也许它没有地址\u 1
属性。尝试使用var\u dump($address)
查看其中的内容。var\u dump($address);以帮助您调试代码。