SimpleXML使用详解
SimpleXML使用详解
介绍
SimpleXML提供了一种简单,直观的方法来处理XML。它只有一个单一类型的类,三个函数和六个方法。
使用SimpleXML
SimpleXMLElement 类是这个扩展中所有操作的核心类。可以用new关键字直接创建这种类,或是使用simplexml_load_file()或 simplexml_load_string()函数返回这种类。本文将使用清单7-1的XML文档来说明如何使用SimpleXML,将此文档命名为 sml.xml。
清单7-1 sml.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<book lang="en">
<bookinfo>
<title>SimpleXML in PHP 5</title>
<author>
<firstname>Rob</firstname>
<surname>Richards</surname>
</author>
<copyright>
<year>2005</year>
<holder>Rob Richards</holder>
</copyright>
</bookinfo>
<preface>
<title>Using SimpleXML</title>
<para>An example DOM Tree using DocBook.</para>
</preface>
<chapter id="navigation">
<title>Accessing Elements</title>
<para>Elements are accessed as properties</para>
<para>
<![CDATA[
<?php
$data = '<?xml version="1.0"?>
<root>content</root>';
$sxe = simplexml_load_string($data);
var_dump($sxe);
?>
]]>
</para>
</chapter>
</book>
创建一个SimpleXMLElement对象
使用new关键字创建
$xml = "<root><node1>Content</node1></root>";
$sxe = new SimpleXMLElement($xml);//SimpleXMLElement Object ( [node1] => Content )
使用simplexml_load_string()创建
$xml = "<root><node1>Content</node1></root>";
$sxe = simplexml_load_string($xml);//SimpleXMLElement Object ( [node1] => Content )
如何选择这两种创建SimpleXMLElement的方法呢?simplexml_load_string()提供了更多的函数,比如控制解析选项的能力。如果不需要这些额外的函数的话就可以凭个人爱好选择一种方法。
使用simplexml_load_file()从一个URI创建
$sxe = simplexml_load_file("filename.xml");
simplexml_load_string()和simplexml_load_file()都有一个必需的参数和可选的参数。从PHP5.1开始simplexml_load_file()多了一个用来控制解析行为的第三个参数。
/* Prototype for PHP 5.0 */
simplexml_load_file(string data [, string class_name])
/* Prototype for PHP 5.1 */
simplexml_load_file(string data [, string class_name [, int options]])
保存XML数据
与DOM扩展一样,SimpleXML也提供了一个用来输出XML内容的方法asXML()。可以用这个方法以字符串或文件形式输出这个文档或文档中的某个节点。
$xml = "<root><node1>content</node1></root>";
$sxe = new SimpleXMLElement($xml);
print $sxe->asXML();
$sxe->asXML('test.xml');
输出:
<?xml version="1.0"?>
<root><node1>content</node1></root>
访问元素节点
在SimpleXML中,可以直接通过元素的名称来访问特定的元素。
访问元素
当一个文档被载入SimpleXML时,文档被看成是一个SimpleXML对象,文档中的所有元素都被看成是该对象的属性。
<?php
$book = simplexml_load_file('sxml.xml');
/* Access the bookinfo child element of the book element */
$bookinfo = $book->bookinfo;
/* Access the title child element from the bookinfo element */
$title = $bookinfo->title;
?>
如果使用DOM来访问title,代码如下
$dom = new DOMDocument();
$dom->load('sxml.xml');
$book = $dom->documentElement;
foreach($book->childNodes as $node) {
if ($node->nodeName == "bookinfo") {
foreach($node->childNodes as $child) {
if ($child->nodeName == "title") {
$node = $child;
break 2;
}
}
}
}
if ($node) {
$title = $node;
}
显然SimpleXML对的起它的名字。
访问内容
<?php
$book = simplexml_load_file('sxml.xml');
$bookinfo = $book->bookinfo;
$title = $bookinfo->title;
/* Object examined with var_dump */
var_dump($title);
/* Using print with element containing text-only content */
print "Title: ".$title."\n";
$author = $bookinfo->author;
/* Object examined with var_dump */
var_dump($author);
/* Using print with element containing child elements */
print "Author: ".$author."\n";
?>
这段代码检查了两个SimpleXMLElement对象,$author和$title。两者的区别是$author元素有包含子元素而$title元素只包含一个文本节点。
输出如下:
object(SimpleXMLElement)#4 (1) {
[0]=>
string(18) “SimpleXML in PHP 5″
}
Title: SimpleXML in PHP 5
object(SimpleXMLElement)#6 (2) {
[”firstname”]=>
string(3) “Rob”
[”surname”]=>
string(8) “Richards”
}
Author:
检查输出结果可以发现,$title是一个包含有文本内容的SimpleXMLElement对象,索引0表示元素的文本内容,当打印$title时,文本内容将以字符串形式返回。
$author元素有两个子元素,从输出结果可以看出,这些子元素被看成SimpleXMLElement对象的属性,这些属性的值是它们对应的节点包含的内容。用print输出$author时,输出结果是空格和换行符。
如果一个元素无子元素,只包含文本内容,那么可以将此元素所对应的SimpleXMLElement对象视为一个字符串来使用,有些情况下,为了获得以字符串形式返回文本内容,必须执行类型转换操作:
$titlecontent = (string) $title;
有子元素的元素所对应的SimpleXMLElement对象将返回该对象直属的文本节点,而不是任一子元素的内容。如果用print输出$author,将得到一个27字符长度,包含空格和换行符的字符。 Neither of the child elements,firstname or surname, nor their content is returned in the string.
为了理解最后一点,可以运行一些下面这段代码:
$doc = new SimpleXMLElement('<root>some<child1>subtext</child1>thing</root>');
print $doc;
使用迭代对象
SimpleXMLElement 对象在大多数情况下是可迭代的,可以用这个特性来访问文档中多个元素名一样的节点,如清单7-1中的para元素。在使用元素名作为属性来访问一个元素时,SimpleXMLElement对象不是一个单一节点的存取器,它实际上是作为属性访问的元素名节点的集合。直接利用元素名作为属性访问实际上访问访问这个集合中的第一个元素。
看下这段代码
$book = simplexml_load_file('sxml.xml');
$para = $book->chapter->para;
print $para."\n";
foreach($para AS $node) {
print $node."\n";
}
这段代码中,$para变量就是para元素的集合,实际上包含了两个元素。如果直接访问$para的话实际上是访问第一个para元素,利用迭代可以看出 $para所包含的内容是两个元素。其中CDATA节点被看做是纯文本的内容,其中包含的空格和换行符都会被如实输出。
用迭代的方式来访问所有的元素显然不太实际,有时候我们希望访问结果集中的某个特定的元素,这时可以使用从0开始的索引来访问这个结果集,例如:
$book = simplexml_load_file('sxml.xml');
$para = $book->chapter->para[1];
print "Content: ".$para."\n";
foreach($para AS $node) {
print "Iter Content: ".$node."\n";
}
运行这段代码会发现foreach循环失效了,这是因为SimpleXML知道你只是在寻找结果集中某个特定的元素,这种情况下对象是不可迭代的。
Caution:使用索引方式访问一个SimpleXMLElement对象会返回一个不可以迭代的对象,因为它是一个单一的元素而不是一个元素集。
访问未知元素
在不知道XML文档的结构的情况下可以利用SimpleXML中的children()方法来返回一个可以迭代方式访问的某个元素的所有子元素的SimpleXML对象。如:
$book = simplexml_load_file('sxml.xml');
$author = $book->bookinfo->author;
$children = $author->children();
foreach($children AS $child) {
print $child."\n";
}
上述代码用children()方法返回了author节点下的所有子元素,然后用foreach循环输出。也可以使用索引方式访问返回的子元素,如echo $children[1];。
理解PHP对象函数
SimpleXMLElement对象的属性是动态的,因为这些属性是由对象实例决定的,而不是由类本身决定的。在PHP中,可以利用get_object_vars()函数来返回某个对象的所有属性,返回的结果是一个包含属性和值的数组,如:
$props = get_object_vars($author);
foreach ($props AS $name=>$value) {
print $name.": ".$value."\n";
}
输出:
firstname: Rob
surname: Richards
这段代码访问的子元素都只包含文本内容,所以返回的数组只包含属性名和值,对于一个包含许多子节点的元素,返回的结果稍微复杂点:
$props = get_object_vars($book->bookinfo);
var_dump($props);
输出:
array(3) {
[”title”]=>
string(18) “SimpleXML in PHP 5″
[”author”]=>
object(SimpleXMLElement)#4 (2) {
[”firstname”]=>
string(3) “Rob”
[”surname”]=>
string(8) “Richards”
}
[”copyright”]=>
object(SimpleXMLElement)#5 (2) {
[”year”]=>
string(4) “2005″
[”holder”]=>
string(12) “Rob Richards”
}
}
使用DOM互操作
另一种访问未知元素的方法是使用DOM,可以将一个节点导入DOM扩展,然后使用DOM的属性和方法来处理。
$book = simplexml_load_file('sxml.xml');
$author = $book->bookinfo->author;
$children = $author->children();
foreach($children AS $child) {
/* Import node into DOM, and get nodeName */
$element = dom_import_simplexml($child);
$name = $element->nodeName;
print $name.": ".$child."\n";
}
将节点导入DOM扩展时并没有创建一个节点的副本(copy),而是直接访问导入的节点(JIMMY注:这个概念很重要)。
修改内容
利用SimpleXML修改元素内容非常方便,你可以改变或移除树中的某个元素,但是不能直接在树中添加一个元素。要添加一个元素,可以使用DOM的互操作性:
$xml = "<root><node1>content</node1></root>";
$sxe = new SimpleXMLElement($xml);
$dom = dom_import_simplexml($sxe);
$dom->appendChild(new DOMElement("node2", "content2"));
print $sxe->asXML();
输出:
<?xml version="1.0"?>
<root><node1>content</node1><node2>content2</node2></root>
编辑文本内容
可以利用SimpleXML的属性赋值方法来直接编辑一个元素的内容,要主意的是如果文档中有多个元素名一样的元素,如果没有使用索引来指定要编辑哪个元素时PHP将发出一个警告。如:
$book = simplexml_load_file('sxml.xml');
/* Modify an unspecified para element where multiple para elements exist */
$book->chapter->para = "Removed CDATA";
输出:
Warning: main() [/phpmanual/function.main.html]: Cannot assign to an array of nodes
(duplicate subnodes or attr detected)
必须给para指定索引告诉程序你要编辑哪个元素:
$book = simplexml_load_file('sxml.xml');
$book->chapter->para[1] = "Removed CDATA";
print $book->chapter->asXML();
输出:
<chapter id="navigation">
<title>Acessing Elements</title>
<para>Elements are accessed as properties</para>
<para>Removed CDATA</para>
</chapter>
这样,第二个para元素的内容被改为Removed CDATA。如果要编辑一个在文档中唯一存在的元素可不必指定索引,直接修改。如修改title:
$book = simplexml_load_file('sxml.xml');
$book->chapter->title = "New Title";
$book->chapter->para[1] = "Removed CDATA";
print $book->chapter->asXML();
输出:
<chapter id="navigation">
<title>New Title</title>
<para>Elements are accessed as properties</para>
<para>Removed CDATA</para>
</chapter>
强烈建议使用索引来编辑元素,除非你对文档的结果非常确定。使用索引来编辑title元素会比较安全,如$book->chapter->title[0] = “New Title”;这行代码用索引[0]指定要编辑第一个title。
编辑有子树的元素
$book = simplexml_load_file('sxml.xml');
$cholder = $book->bookinfo->copyright->holder;
print $cholder->asXML()."\n";
$book->bookinfo = "No Book Info";
print $book->bookinfo->asXML()."\n";
print $cholder->asXML()."\n";
输出:
<holder>Rob Richards</holder>
<bookinfo>No Book Info</bookinfo>
Warning: SimpleXMLElement::asXML() [/phpmanual/function.asXML.html]: Node no
longer exists in N:\CVS Projects\php5\Debug_TS\booksxe.php on line 7
这段代码中,首先将文档中的holder元素赋值给$cholder变量,然后打印该变量。bookinfo元素包含有title,author和 copyright子树,它的内容被字符串No Book Info代替,从bookinfo的输出结果可以看出,它的子树被清空并且被字符串代替了。接着试图再次打印$cholder变量的XML内容,程序输出一个警告,这个变量依然是一个SimpleXMLElement对象,但它所属的节点在bookinfo元素改变时已经被破坏了。
另一种情况。将bookinfo元素中的子元素用字符串 代替。
$book = simplexml_load_file('sxml.xml');
$book->bookinfo = "<title>SimpleXML in PHP 5</title>";
print $book->bookinfo->asXML()."\n";
如果你认为上述代码将bookinfo中的内容清空后再给bookinfo创建了一个子节点title,那么你错了。输出结果是
<title>SimpleXML in PHP 5</title>
实际上bookinfo元素的子元素都被移除了,但是新赋值的XML数据被转义成文本内容,而不是一个新的子元素。
如果想用一个子树代替另一个子树,可以利用DOM扩展:
$book = simplexml_load_file('sxml.xml');
$bookinfo = dom_import_simplexml($book->bookinfo);
/* 移除bookinfo元素下的所有子元素*/
while ($bookinfo->firstChild) {
$bookinfo->removeChild($bookinfo->firstChild);
}
$bookinfo->appendChild(new DOMElement("title", "SimpleXML in PHP 5"));
print $book->bookinfo->asXML()."\n";
输出结果:
<bookinfo>
<title>SimpleXML in PHP 5</title>
</bookinfo>
移除元素
可以用PHP内置函数unset()来将一个元素从树中移除。unset()的参数必须是一个SimpleXMLElement,用属性方法来访问要移除的元素。例如,从chapter节点移除title元素:
$book = simplexml_load_file('sxml.xml');
$book->chapter->para[1] = "Removed CDATA";
unset($book->chapter->title);
print $book->chapter->asXML();
上述代码执行后,chapter的结构为:
<chapter id="navigation">
<para>Elements are accessed as properties</para>
<para>Removed CDATA</para>
</chapter>
将这个结果与下面代码执行的结果想比较:
$book = simplexml_load_file('sxml.xml');
$book->chapter->para[1] = "Removed CDATA";
$title = $book->chapter->title;
unset($title);
print $book->chapter->asXML();
输出结果
<chapter id="navigation">
<title>Acessing Elements</title>
<para>Elements are accessed as properties</para>
<para>Removed CDATA</para>
</chapter>
title元素没有被移除,unset函数只对$title变量作用并没有将title元素从树中移除。
在移除一个元素时必须注意,用索引来指定的特定元素不会被移除:
$book = simplexml_load_file('sxml.xml');
$book->chapter->para[1] = "Removed CDATA";
unset($book->chapter->title[0]);
print $book->chapter->asXML();
输出:
<chapter id="navigation">
<title>Acessing Elements</title>
<para>Elements are accessed as properties</para>
<para>Removed CDATA</para>
</chapter>
如果要移除所有的para元素时可以利用下面代码:
$book = simplexml_load_file('sxml.xml');
unset($book->chapter->para);
print $book->chapter->asXML();
输出:
<chapter id="navigation">
<title>Acessing Elements</title>
</chapter>
问题是如果你只想移除其中的一个para元素时要怎么办。这时可以再次用到DOM扩展:
$book = simplexml_load_file('sxml.xml');
$chapter = dom_import_simplexml($book->chapter);
$node = $chapter->lastChild;
while($node) {
if ($node->nodeName == "para") {
$chapter->removeChild($node);
$node = NULL;
break;
}
$node = $node->previousSibling;
}
print $book->chapter->asXML();
输出:
<chapter id="navigation">
<title>Acessing Elements</title>
<para>Elements are accessed as properties</para>
</chapter>
所幸的是PHP5.2开始已经支持删除用索引指定的元素了:
$book = simplexml_load_file('sxml.xml');
unset($book->chapter->para[1]);
print $book->chapter->asXML();
访问属性
读取属性
下面的代码输出了book元素中的lang属性
$book = simplexml_load_file('sxml.xml');
print $book['lang'];
访问用索引指定的元素的属性:
$book = simplexml_load_file('sxml.xml');
print $book->chapter[0]['id'];
在不知道属性名的情况下可以用attributes()方法来输出属性:
$book = simplexml_load_file('sxml.xml');
foreach($book->chapter->attributes() AS $attribute) {
print $attribute."\n";
}
如果要获得位置的属性名,可以使用DOM扩展:
$book = simplexml_load_file('sxml.xml');
foreach($book->chapter->attributes() AS $attribute) {
$att = dom_import_simplexml($attribute);
print $att->nodeName."\n";
print $attribute."\n";
}
修改属性
修改属性的值跟修改元素的值一样,直接对其赋值就可以了:
$book = simplexml_load_file('sxml.xml');
$book['lang'] = "es";
print $book['lang'];
添加一个属性也很简单,如果对一个不存在的属性名进行赋值就给元素创建一个新属性
$book = simplexml_load_file('sxml.xml');
$book->bookinfo->author->firstname["prefix"] = "Mr.";
print $book->bookinfo->author->asXML();
输出:
<author>
<firstname prefix="Mr.">Rob</firstname>
<surname>Richards</surname>
</author>
移除属性
移除属性也用到unset()函数:
$book = simplexml_load_file('sxml.xml');
$book->bookinfo->author->firstname["prefix"] = "Mr.";
print $book->bookinfo->author->firstname->asXML()."\n\n";
unset($book->bookinfo->author->firstname["prefix"]);
print $book->bookinfo->author->firstname->asXML();
输出:
<firstname prefix="Mr.">Rob</firstname>
<firstname>Rob</firstname>
扩展SimpleXMLElement类
class mySXE extends SimpleXMLElement {
function appendChild($name, $content) {
$dom = dom_import_simplexml($this);
$dom->appendChild($dom->ownerDocument->createElement($name, $content));
}
}
当实例化扩展的类时,文档的每个节点对象的类型都是扩展类的类型。
$sxe = new mySXE("<root><node1></node1></root>");
$sxe->node1->appendChild("node2", "content");
print $sxe->asXML();
输出:
<?xml version="1.0"?>
<root><node1><node2>content</node2></node1></root>
使用new方法可以用来处理字符串类型的XML,如果XML保存在一个文件中,那么可以将扩展的类名作为第二个参数传给simplexml_load_string或simplexml_load_file
$sxe = simplexml_load_string("<root><node1></node1></root>", "mySXE");
$sxe->node1->appendChild("node2", "content");
print $sxe->asXML();
输出结果与用new关键字输出的结果一样。
在SimpleXML中使用命名空间
将清单7-1的内容改为
<?xml version="1.0" encoding="UTF-8"?>
<book lang="en">
<bookinfo xmlns="http://www.example.com/ns1">
<title>SimpleXML in PHP 5</title>
<author>
<firstname>Rob</firstname>
<surname>Richards</surname>
</author>
<copyright>
<year>2005</year>
<holder>Rob Richards</holder>
</copyright>
</bookinfo>
</book>
如果试图用普通的方法来访问元素或属性,你会分析这并不可行,例如:
$book = simplexml_load_file('sxmlns.xml');
print $book["lang"]."\n";
print $book->bookinfo->title."\n";
输出的结果是两行空白。
在访问命名空间节点前,必须使用children()和attributes()方法。这两个方法不仅可以在没有指定参数的时候使用,也可以在指定一个 URI命名空间作为参数使用。如果一个SimleXMLElement对象是从这两个方法返回的,那么你就可以像普通的元素和属性一样访问命名空间下的元素和属性:
$book = simplexml_load_file('sxmlns.xml');
/* 返回 http://www.example.com/ns2 命名空间下的所有属性 */
$bookatts = $book->attributes("http://www.example.com/ns2");
print $bookatts["lang"]."\n";
/* 返回 http://www.example.com/ns1 命名空间下的所有元素*/
$bookns = $book->children("http://www.example.com/ns1");
$bookinfo = $bookns->bookinfo;
/* 重置命名空间来访问非命名空间的元素 */
$nonsbkinfo = $bookinfo->children();
print $nonsbkinfo->title."\n";
children ()和attributes()方法可以被看做是过滤器,如果没有参数或者传递一个NULL作为参数,这两个方法将返回非命名空间下的元素或属性;否则将返回特定命名空间下的元素或属性。在重置之前,命名空间仍然起作用并且被子节点继承。例如,使用$bookinfo被设置为命名空间 http://www.example.com/ns1的对象,可以使用 print $bookinfo->author->firstname来但因author中的firstname元素。所有的元素都在命名空间下,因此你在创建$bookinfo对象时不必一直使用children()设置命名空间。
本文来源:http://hi.baidu.com/bailu1234/blog/item/c88fd1c2e41fa358b319a893.html
SimpleXML使用详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- Android自定义控件:自适应大小的文本控件
需求 自适应大小的文本: 效果图: 项目开发中,开发人员根据UI人员提供的一套尺寸,布局了一些带文本的页面, 往往会少考虑一些数据极限的问题,造成机型屏幕适配问题. 例如: 文本(或数值)长度可变,如 ...
- Django学习day8——admin后台管理和语言适应
Django最大的优点之一,就是体贴的为你提供了一个基于项目model创建的一个后台管理站点admin.这个界面只给站点管理员使用,并不对大众开放. 1. 创建管理员用户 (django) E:\Dj ...
- Hibernate一对多、多对一的关系表达
一.关系表达: 1.一对多.多对一表的关系: 学生表: 班级表: 在学生表中,学生的学号是主键.在班级表中,班级号是主键,因此,学生表的外键是classno.因此,班级对应学生是一对多,学生对应班级是 ...
- setAccessible()方法
在java代码中,我们经常使用private来控制类中成员变量的访问权限,在类的外边我们一般使用get方法获取私有成员变量的值,但是如果类中没有get方法,但我们又想获取该类私有成员变量的值,该怎么办 ...
- JDBC报错:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
报错原因:查阅资料发现这都是因为安装mysql的时候时区设置的不正确 mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,采用+8:00格式 解决方法: 1.修改MySQL的配置文件,MyS ...
- python3学习,有c++的基础
# 为注释一行 ''' ''' 和 """ """为注释多行 用缩进表示代码块,不用{},同一等级代码用的缩进数一致 一条语句写在多行:a= ...
- PHP对象继承
PHP对象继承<?php class foo{ public function printItem($string) { echo 'Foo: ' . $string . PHP_EOL; } ...
- .NET单例模式快速学习应用
单例模式属于设计模式中最简单的一个模式,在实际应用中也非常广泛,但可能是受到各类教程的影响,看到很多实现方式仍然沿用Java的那一套,其实在.NET中可以用更简洁的实现方式. 一.知识点介绍 核心目标 ...
- 编写 Dockerfile 最佳实践
官方仓库虽然有数十万计的免费镜像,但大多数无法直接满足公司业务需求,这就需要我们自己去定制镜像了. Docker通过Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文 ...
- 【SpringBoot | Druid】SpringBoot整合Druid
SpringBoot整合Druid Druid是个十分强大的后端管理工具,具体的功能和用途请问阿里爸爸 1. 在pom.xml中导入包 <!-- alibaba 的druid数据库连接池 --& ...