使用SimpleXML应该注意的问题有哪些?
SimpleXML提供了一套简单快速的XML操作方法,大大地提高了XML操作的效率。
但是有时不小心也会带来不小的麻烦,看下面一段代码:
$xml=simplexml_load_string('<root><title>title</title></root>');
$title=$xml->title;
echo$title;
$xml->title='test';
echo$title;
猜猜第二个输出结果会是多少?是'test',而不是想像中的'title'。为什么会这样呢?原因在这里:
echo gettype($xml->title)//object
echo get_class($xml->title);//SimpleXMLElement
看到了吗,$xml->title是一个SimpleXMLElement类的实例,而不是字符串。
SimpleXMLElement应该是实现了一个类似于__tostring()的接口(有兴趣的可以去看一下PHP的源码,在"ext/simplexml/"中),才能在echo等表达式中表现类似于一个字符串。所以还有个地方需要注意:
$_SESSION['test']=$xml->title;//保存一个SimpleXMLElement变量到SESSION中。
$_SESSION['test']=(string)$xml->title;//字符串
$_SESSION['test']=strval($xml->title);//这样也行。
所以$title实际上保存的是一个到SimpleXMLElement类的一个引用,而不是字符串的副本。想要得到字符串的副本只能进行类型转换:
$title=(string)$xml->title;//获得字符串
$xml->title='test';
echo$title;//输出title
最新文章
- 玩转JavaScript OOP[3]&mdash;&mdash;彻底理解继承和原型链
- lob结构
- [MySQL Reference Manual] 7 备份和恢复
- (准备写)URAL1824 Ifrit Bomber 题解
- 删除sde用户问题
- Oracle instr函数与SqlServer charindex的区别
- Bootstrap3.0学习第十八轮(JavaScript插件——下拉菜单)
- TopCoder SRM 582 ColorfulBuilding
- 手势冲突UIPanGestureRecognizer 和UIPinchGestureRecognizer
- 常用的HTML标签
- laravel artisan 命令工具
- HDU 5172 GTY&#39;s gay friends 线段树
- php实现人员的权限管理
- 网络防火墙和NAT地址转换
- Grunt 实战
- Delphi (Library Path Browsing Path)
- javascript文件加载模式与加载方法
- python链接Hive
- JAVA-数据库之添加记录
- 计蒜客 31460 - Ryuji doesn&#39;t want to study - [线段树][2018ICPC徐州网络预赛H题]