發個 和 xml 解析相關的有關問題

來源:互聯網
上載者:User
發個 和 xml 解析相關的問題
$a = new SimpleXMLElement(' 1');
if(isset ($a[0]))
{
var_dump($a);
var_dump($a[0]);
var_dump($a[1]);
}
die();

大家不測試 直接判斷下 認為會列印出什麼。 然後再測試下列印出什麼

誰能解釋下原因?

------解決方案--------------------
同預想...

PHP code
object(SimpleXMLElement)#1 (1) {  ["b"]=>  string(1) "1"}object(SimpleXMLElement)#2 (1) {  ["b"]=>  string(1) "1"}object(SimpleXMLElement)#2 (1) {  ["b"]=>  string(1) "1"}
------解決方案--------------------
難道各地的測試不一樣!
PHP code
object(SimpleXMLElement)#1 (1) {  ["b"]=>  string(1) "1"}object(SimpleXMLElement)#2 (1) {  ["b"]=>  string(1) "1"}NULL
------解決方案--------------------
object(SimpleXMLElement)#1 (1) { ["b"]=> string(1) "1" } object(SimpleXMLElement)#2 (1) { ["b"]=> string(1) "1" }
Warning: main() [function.main]: Cannot add element xml number 1 when only 0 such elements exist in D:\APMServ5.2.6\www\htdocs\localhost\simple_xml.php on line 7
object(SimpleXMLElement)#2 (1) { ["b"]=> string(1) "1" }
-----------------------------
var_dump($a);這個類型是對象是沒問題的!

a[0] 或 a[1] 是數組的調用!會報錯誤也解釋的過去;



------解決方案--------------------
啥問題?
------解決方案--------------------

------解決方案--------------------
嗯,比較簡單而不求甚解的回答是: 這個擴充就這麼寫的.....讓$a[0]返回$a本身....

嗯,不過這個擴充到底怎麼寫的我也沒看過它c源碼...有興趣你可以看看....

不過,這個在php層面也一樣可以實現,

給你個例子,當然關鍵就在這個 "implements ArrayAccess"
http://www.php.net/manual/en/class.arrayaccess.php


PHP code
 a=$value;     }     public function  offsetUnset (  $offset ){         if($offset==0) unset($this->a);     }      } $m=new X();  print_R($m); print_R($m[0]);
------解決方案--------------------
PHP code
object(SimpleXMLElement)#1 (1) { ["b"]=> string(1) "1" } object(SimpleXMLElement)#2 (1) { ["b"]=> string(1) "1" } Warning: main() [function.main]: Cannot add element xml number 1 when only 0 such elements exist in PHPDocument1 on line 7object(SimpleXMLElement)#2 (1) { ["b"]=> string(1) "1" }
------解決方案--------------------
ok, 其實$a->xx, $a[0], 包括 $a 這些,都是我們操作一個資料結構的介面....
一個介面能得到什麼結果,完全取決於我們如何寫code
同樣,一個資料結構提供了什麼介面,也取決於我們如何寫code
(當然,這有一些限制,有邏輯上的,有語言功能上的)

比如,任何一個類,只要我們實現了__toString方法,就能直接 echo $obj;
但是這不代表,這個$obj是一個字串,只是代表我們提供了一個以字串方式操作該資料的介面.

所以,回到你的問題,
這個SimpleXMLElement是一個資源(php的所謂資源,就是其c/c++來源程式中的結構或類等),
那麼提供什麼樣的介面,就是該擴充來源程式裡能控制的,
它可以提供類操作的介面"->", 也能提供數組操作介面"[0]",也能提供字元輸出介面"echo"等,
也可以同時提供.那麼,自然的,在提供數組操作介面時,讓$x[0]返回$x本身也就不是太不能理解的事了.


我給你看的例子,就是在php層面,通過ArrayAccess這個介面(interface,可以翻譯成介面,也可以翻譯成介面), 給一個類提供了數組方式操作的介面.
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.