PHP中的索引器

时间:2011-06-10 18:08:50

标签: php class

我一直在使用返回simplexml_load_file()的{​​{1}}函数,为了学习目的,我尝试了 weather.gov restful服务来提供一些数据,看看如何它有效。

基本上这就是我所做的:

SimpleXMLElement

该链接属于$xml = simplexml_load_file("http://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdXMLclient.php?whichClient=NDFDgen&lat=38.99&lon=-77.01&listLatLon=&lat1=&lon1=&lat2=&lon2=&resolutionSub=&listLat1=&listLon1=&listLat2=&listLon2=&resolutionList=&endPoint1Lat=&endPoint1Lon=&endPoint2Lat=&endPoint2Lon=&listEndPoint1Lat=&listEndPoint1Lon=&listEndPoint2Lat=&listEndPoint2Lon=&zipCodeList=&listZipCodeList=&centerPointLat=&centerPointLon=&distanceLat=&distanceLon=&resolutionSquare=&listCenterPointLat=&listCenterPointLon=&listDistanceLat=&listDistanceLon=&listResolutionSquare=&citiesLevel=&listCitiesLevel=&sector=&gmlListLatLon=&featureType=&requestedTime=&startTime=&endTime=&compType=&propertyName=&product=time-series&begin=2004-01-01T00%3A00%3A00&end=2015-06-10T00%3A00%3A00&maxt=maxt&Submit=Submit"); var_dump($xml); 和其他服务。

现在我的问题来了:

当我抛弃变量时,有些东西引起了我的注意,我无法找到一种方法来描述它。

以下是转储变量的一部分:

weather.gov

当我看到公开object(SimpleXMLElement)[1] public '@attributes' => array 'version' => string '1.0' (length=3) public 'head' => object(SimpleXMLElement)[2] public 'product' => object(SimpleXMLElement)[4] public '@attributes' => array ... 时,我认为我可以输入变量'@attributes' => array,但我错了,因为我知道这是正确的$xml->attributes['version']方式,我开始想知道它是如何可能的因为$xml['version']在这里变成了数组,但是这个代码在运行第一个代码$xml后也能正常工作,该代码返回$xml->head->product->title下定义的title元素的值。

它看起来像C#中的索引器。基本上这是下面c#中的有效代码:

head > product

但我想不出一种在PHP类中提供相同功能的方法。

有人可以告诉我如何在PHP中调用'public int this[int index] // Indexer declaration { // get and set accessors } ,这是一个索引器吗?以及如何在PHP中实现此功能。

2 个答案:

答案 0 :(得分:3)

可以使用索引器访问从ArrayObject和/或实现ArrayAccessArrayObject本身实现的)继承的类的对象。虽然SimpleXMLElement本身没有实现任何一个(它可能是一个内部实现),但您可以使用它们在自己的类中实现相同的功能。

答案 1 :(得分:1)

@是一个Xpath字符。 XPath由SimpleXML调用,如下所示:$xml->xpath()。例如,如果你想获得元素srsName的属性product,它将以某种方式显示(这个例子绝对不准确,你需要找到更多关于xpath的东西),如下所示:

$xml->xpath("product/@srsName");