我很难将这个 PHP 5.3 引入的匿名函数转换为与早期版本的 PHP 一起使用。
我得到的错误是: Unexpected T_FUNCTION 并且在 $testResult 上。这是匿名函数。任何人都可以将其转换为使用早期版本的 PHP。代码在一个类中。
这是代码:
abstract class geocoder {
public $ch = null;
public $xd = null;
public $xp = null;
public function __construct() {
$this->ch = curl_init();
curl_setopt_array($this->ch, array (
CURLOPT_BINARYTRANSFER => true,
#CURLOPT_FAILONERROR => true,
CURLOPT_FOLLOWLOCATION => false,
#CURLOPT_FORBID_REUSE => true,
#CURLOPT_MUTE => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 2,
#CURLOPT_COOKIEJAR => '/dev/null',
#CURLOPT_COOKIEFILE => '/dev/null',
#CURLOPT_INTERFACE => 'x.x.x.x',
CURLOPT_USERAGENT => 'curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5',
CURLOPT_HEADER => false));
}
public function doreq($u) {
curl_setopt($this->ch, CURLOPT_URL, $u);
return curl_exec($this->ch);
}
abstract public function dogeocode($q);
}
class geocodeGMaps extends geocoder {
public function __construct() {
parent::__construct();
#$this->xd = new DOMDocument();
#$this->xp = new DOMXpath($this->xd);
}
public function testResult(&$res) {
switch (true) {
case !$res:
return 'Remote call HTTP request failed';
case !($res = @json_decode($res, true)):
return 'Failed to parse JSON result';
case !isset($res['status']):
return 'Remote call returned NULL status';
case !($res['status'] == 'OK'):
return 'Remote call returned !OK status';
case !isset($res['results']):
case !isset($res['results'][0]):
return 'NULL or empty result set';
case !isset($res['results'][0]['geometry']['location_type']):
return 'NULL location type';
case !($res['results'][0]['geometry']['location_type'] == 'ROOFTOP'):
return '';
case !isset($res['results'][0]['geometry']['location']):
case !isset($res['results'][0]['geometry']['location']['lat']):
case !isset($res['results'][0]['geometry']['location']['lng']):
return 'No location returned in result';
default:
return NULL;
break;
}
return NULL;
}
public function dogeocode($q) {
$res = @$this->doreq("http://maps.googleapis.com/maps/api/geocode/json?address=" . urlencode($q) . "&sensor=false");
if ($testResult = testResult($res))
throw new Exception ($testResult);
$comp = array('query' => &$q);
$map = array(
'street_number' => 'street_number',
'route' => 'route',
'city' => 'locality',
'county' => 'administrative_area_level_2',
'state' => 'administrative_area_level_1',
'country' => 'country',
'zip' => 'postal_code');
if (isset($res['results'][0]['address_components'])) {
foreach ($res['results'][0]['address_components'] as &$v)
foreach ($map as $k => &$l)
if (in_array($l, $v['types']) && !isset($comp[$k]))
$comp[$k] = $v['long_name'];
}
return array ('formatted' => (isset($res['results'][0]['formatted_address']) ? $res['results'][0]['formatted_address'] : NULL),
'components' => &$comp,
'latlng' => array ($res['results'][0]['geometry']['location']['lat'],
$res['results'][0]['geometry']['location']['lng']));
}
}
任何人都可以帮助在 PHP 5.2 中进行这项工作吗?