<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ZNJACK Prestashop &#38; PHP Architect &#187; php</title>
	<atom:link href="http://www.znjack.com/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.znjack.com</link>
	<description>The software architect is the technical driving force behind the project, not a visionary or dreamer.</description>
	<lastBuildDate>Mon, 05 Sep 2011 05:08:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>php SPL读取文件夹结构的例子</title>
		<link>http://www.znjack.com/php-spl%e8%af%bb%e5%8f%96%e6%96%87%e4%bb%b6%e5%a4%b9%e7%bb%93%e6%9e%84%e7%9a%84%e4%be%8b%e5%ad%90.html,144</link>
		<comments>http://www.znjack.com/php-spl%e8%af%bb%e5%8f%96%e6%96%87%e4%bb%b6%e5%a4%b9%e7%bb%93%e6%9e%84%e7%9a%84%e4%be%8b%e5%ad%90.html,144#comments</comments>
		<pubDate>Wed, 21 Apr 2010 16:32:50 +0000</pubDate>
		<dc:creator>znjack</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[spl]]></category>

		<guid isPermaLink="false">http://www.znjack.com/?p=144</guid>
		<description><![CDATA[这是一个简单的用php SPL读取文件夹结构的例子： function getFiles&#40;$folder&#41;&#123; foreach&#40;new DirectoryIterator&#40;$folder&#41; as $v&#41;&#123; if&#40;$v-&#62;isDir &#40;&#41; &#38;&#38; !$v-&#62;isDot&#40;&#41;&#41;&#123; $files = array_merge&#40;&#40;array&#41;$files, &#40;array&#41;getFiles&#40;$folder.DIRECTORY_SEPARATOR.$v-&#62;getFilename&#40;&#41;&#41;&#41;;&#125; elseif&#40;$v-&#62;isFile &#40;&#41;&#41; $files&#91;&#93; = $folder.DIRECTORY_SEPARATOR.$v-&#62;getFilename&#40;&#41;; &#125; return $files; &#125; 执行的时候 var_dump&#40;getFiles&#40;dirname&#40;__FILE__&#41;&#41;&#41;;]]></description>
			<content:encoded><![CDATA[<p>这是一个简单的用php SPL读取文件夹结构的例子：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> getFiles<span style="color: #009900;">&#40;</span><span style="color: #000088;">$folder</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> DirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$folder</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isDir</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isDot</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$files</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#41;</span><span style="color: #000088;">$files</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#41;</span>getFiles<span style="color: #009900;">&#40;</span><span style="color: #000088;">$folder</span><span style="color: #339933;">.</span><span style="color: #009900; font-weight: bold;">DIRECTORY_SEPARATOR</span><span style="color: #339933;">.</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFilename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isFile</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$folder</span><span style="color: #339933;">.</span><span style="color: #009900; font-weight: bold;">DIRECTORY_SEPARATOR</span><span style="color: #339933;">.</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFilename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$files</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>执行的时候</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span>getFiles<span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.znjack.com/php-spl%e8%af%bb%e5%8f%96%e6%96%87%e4%bb%b6%e5%a4%b9%e7%bb%93%e6%9e%84%e7%9a%84%e4%be%8b%e5%ad%90.html,144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prestashop 1.2.5中的gsitemap的bug</title>
		<link>http://www.znjack.com/prestashop-1-2-5%e4%b8%ad%e7%9a%84gsitemap%e7%9a%84bug.html,110</link>
		<comments>http://www.znjack.com/prestashop-1-2-5%e4%b8%ad%e7%9a%84gsitemap%e7%9a%84bug.html,110#comments</comments>
		<pubDate>Mon, 22 Mar 2010 08:08:47 +0000</pubDate>
		<dc:creator>znjack</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[prestashop]]></category>
		<category><![CDATA[google sitemap]]></category>

		<guid isPermaLink="false">http://www.znjack.com/?p=110</guid>
		<description><![CDATA[我不知道官方在1.3.x修复了这个问题没有，不过至少1.2.5是一个使用比较多的版本，所以可能会有许多人不愿意升级。 google sitemap在prestashop中的模块叫做gsitemap，在这个版本中，存在生成其他语言地址的时候会增加2次域名的问题。 比如默认语言http://znjack.com/abc这个地址是正常的，但是我还增加了第二甚至更多种语言，这时候会生成类似http://znjack.com/lang-zh/znjack.com/abc这样的地址，明显是错误的。 打开modules/gsitemap/gsitemap.php，修改86、113、147、165行，把最后的$tmplink换成str_ireplace(&#8216;/&#8217;.$_SERVER['HTTP_HOST'].&#8217;/', ”, $tmpLink)。 无论你启用了url friendly与否，这里都会出现这样的问题，而且问题是一样的。 这里有下载]]></description>
			<content:encoded><![CDATA[<p>我不知道官方在1.3.x修复了这个问题没有，不过至少1.2.5是一个使用比较多的版本，所以可能会有许多人不愿意升级。</p>
<p>google sitemap在prestashop中的模块叫做gsitemap，在这个版本中，存在生成其他语言地址的时候会增加2次域名的问题。</p>
<p>比如默认语言http://znjack.com/abc这个地址是正常的，但是我还增加了第二甚至更多种语言，这时候会生成类似http://znjack.com/lang-zh/znjack.com/abc这样的地址，明显是错误的。</p>
<p>打开modules/gsitemap/gsitemap.php，修改86、113、147、165行，把最后的$tmplink换成str_ireplace(&#8216;/&#8217;.$_SERVER['HTTP_HOST'].&#8217;/', ”, $tmpLink)。</p>
<p>无论你启用了url friendly与否，这里都会出现这样的问题，而且问题是一样的。</p>
<p>这里有下载<br />
<a class="downloadlink" href="http://www.znjack.com/wp-content/plugins/download-monitor/download.php?id=2" title=" downloaded 220 times" >prestashop google sitemap module (220)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.znjack.com/prestashop-1-2-5%e4%b8%ad%e7%9a%84gsitemap%e7%9a%84bug.html,110/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP SPL</title>
		<link>http://www.znjack.com/php-spl.html,61</link>
		<comments>http://www.znjack.com/php-spl.html,61#comments</comments>
		<pubDate>Fri, 11 Sep 2009 06:22:00 +0000</pubDate>
		<dc:creator>znjack</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[spl]]></category>

		<guid isPermaLink="false">http://www.znjack.com/?p=61</guid>
		<description><![CDATA[PHP SPL笔记 目录 第一部分 简介 1. 什么是SPL？ 2. 什么是Iterator？ 第二部分 SPL Interfaces 3. Iterator界面 4. ArrayAccess界面 5. IteratorAggregate界面 6. RecursiveIterator界面 7. SeekableIterator界面 8. Countable界面 第三部分 SPL Classes 9. SPL的内置类 10. DirectoryIterator类 11. ArrayObject类 12. ArrayIterator类 13. RecursiveArrayIterator类和RecursiveIteratorIterator类 14. FilterIterator类 15. SimpleXMLIterator类 16. CachingIterator类 17. LimitIterator类 18. SplFileObject类 第一部 简介 1. 什么是SPL？ SPL是Standard PHP Library（PHP标准库）的缩写。 根据官方定义，它是“a [...]]]></description>
			<content:encoded><![CDATA[<p><strong>PHP SPL笔记</strong></p>
<p>目录</p>
<p>第一部分 简介</p>
<p>1. 什么是SPL？</p>
<p>2. 什么是Iterator？</p>
<p>第二部分 SPL Interfaces</p>
<p>3. Iterator界面</p>
<p>4. ArrayAccess界面</p>
<p>5. IteratorAggregate界面</p>
<p>6. RecursiveIterator界面</p>
<p>7. SeekableIterator界面</p>
<p>8. Countable界面</p>
<p>第三部分 SPL Classes</p>
<p>9. SPL的内置类</p>
<p>10. DirectoryIterator类</p>
<p>11. ArrayObject类</p>
<p>12. ArrayIterator类</p>
<p>13. RecursiveArrayIterator类和RecursiveIteratorIterator类</p>
<p>14. FilterIterator类</p>
<p>15. SimpleXMLIterator类</p>
<p>16. CachingIterator类</p>
<p>17. LimitIterator类</p>
<p>18. SplFileObject类</p>
<p><strong>第一部 简介</strong></p>
<p><strong>1. 什么是SPL？</strong></p>
<p>SPL是Standard PHP Library（PHP标准库）的缩写。</p>
<p>根据官方定义，它是“a collection of interfaces and classes that are meant to solve standard problems”。但是，目前在使用中，SPL更多地被看作是一种使object（物体）模仿array（数组）行为的interfaces和 classes。</p>
<p><strong>2. 什么是Iterator？</strong></p>
<p>SPL的核心概念就是Iterator。这指的是一种Design Pattern，根据《Design Patterns》一书的定义，Iterator的作用是“provide an object which traverses some aggregate structure, abstracting away assumptions about the implementation of that structure.”</p>
<p>wikipedia中说，”an iterator is an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation”.……”the iterator pattern is a design pattern in which iterators are used to access the elements of an aggregate object sequentially without exposing its underlying representation”.</p>
<p>通俗地说，Iterator能够使许多不同的数据结构，都能有统一的操作界面，比如一个数据库的结果集、同一个目录中的文件集、或者一个文本中每一行构成的集合。</p>
<p>如果按照普通情况，遍历一个MySQL的结果集，程序需要这样写：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Fetch the &quot;aggregate structure&quot;</span>
<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT * FROM users&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Iterate over the structure</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #666666; font-style: italic;">// do stuff with the row here</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>读出一个目录中的内容，需要这样写：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Fetch the &quot;aggregate structure&quot;</span>
<span style="color: #000088;">$dh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">opendir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/home/harryf/files'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Iterate over the structure</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dh</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #666666; font-style: italic;">// do stuff with the file here</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>读出一个文本文件的内容，需要这样写：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Fetch the &quot;aggregate structure&quot;</span>
<span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/home/hfuecks/files/results.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Iterate over the structure</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">feof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
   <span style="color: #000088;">$line</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fgets</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fh</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">// do stuff with the line here</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>上面三段代码，虽然处理的是不同的resource（资源），但是功能都是遍历结果集（loop over contents），因此Iterator的基本思想，就是将这三种不同的操作统一起来，用同样的命令界面，处理不同的资源。</p>
<p><strong>第二部分 SPL Interfaces</strong></p>
<p><strong>3. Iterator界面</strong></p>
<p>SPL规定，所有部署了Iterator界面的class，都可以用在foreach Loop中。Iterator界面中包含5个必须部署的方法：</p>
<pre>
* current()

This method returns the current index’s value. You are solely
responsible for tracking what the current index is as the
interface does not do this for you.

* key()

This method returns the value of the current index’s key. For
foreach loops this is extremely important so that the key
value can be populated.

* next()

This method moves the internal index forward one entry.

* rewind()

This method should reset the internal index to the first element.

* valid()

This method should return true or false if there is a current
element. It is called after rewind() or next().
</pre>
<p>下面就是一个部署了Iterator界面的class示例：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
* An iterator for native PHP arrays, re-inventing the wheel
*
* Notice the &quot;implements Iterator&quot; - important!
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> ArrayReloaded implements Iterator <span style="color: #009900;">&#123;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * A native PHP array to iterate over
   */</span>
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * A switch to keep track of the end of the array
   */</span>
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$valid</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * Constructor
   * @param array native PHP array to iterate over
   */</span>
 <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">array</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$array</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * Return the array &quot;pointer&quot; to the first element
   * PHP's reset() returns false if the array has no elements
   */</span>
 <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #990000;">rewind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">FALSE</span> <span style="color: #339933;">!==</span> <span style="color: #990000;">reset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * Return the current array element
   */</span>
 <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #990000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #990000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * Return the key of the current array element
   */</span>
 <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #990000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #990000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * Move forward by one
   * PHP's next() returns false if there are no more elements
   */</span>
 <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #990000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">FALSE</span> <span style="color: #339933;">!==</span> <span style="color: #990000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #009933; font-style: italic;">/**
   * Is the current element valid?
   */</span>
 <span style="color: #000000; font-weight: bold;">function</span> valid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>使用方法如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Create iterator object</span>
<span style="color: #000088;">$colors</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayReloaded<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'red'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'green'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'blue'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Iterate away!</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$colors</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$color</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$color</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>你也可以在foreach循环中使用key()方法：</p>
<pre>// Display the keys as well
foreach ( $colors as $key => $color ) {
 echo "$key: $color";
}</pre>
<p>除了foreach循环外，也可以使用while循环，</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Reset the iterator - foreach does this automatically</span>
<span style="color: #000088;">$colors</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rewind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Loop while valid</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$colors</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
   <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$colors</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;: &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$colors</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;
&quot;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$colors</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>根据测试，while循环要稍快于foreach循环，因为运行时少了一层中间调用。</p>
<p><strong>4. ArrayAccess界面</strong></p>
<p>部署ArrayAccess界面，可以使得object像array那样操作。ArrayAccess界面包含四个必须部署的方法：</p>
<pre>
* offsetExists($offset)

This method is used to tell php if there is a value
for the key specified by offset. It should return
true or false.

* offsetGet($offset)

This method is used to return the value specified
by the key offset.

* offsetSet($offset, $value)

This method is used to set a value within the object,
you can throw an exception from this function for a
read-only collection.

* offsetUnset($offset)

This method is used when a value is removed from
an array either through unset() or assigning the key
a value of null. In the case of numerical arrays, this
offset should not be deleted and the array should
not be reindexed unless that is specifically the
behavior you want.
</pre>
<p>下面就是一个部署ArrayAccess界面的实例：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
* A class that can be used like an array
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> Article implements ArrayAccess <span style="color: #009900;">&#123;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$title</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$author</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$category</span><span style="color: #339933;">;</span>  
&nbsp;
 <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #339933;">,</span><span style="color: #000088;">$author</span><span style="color: #339933;">,</span><span style="color: #000088;">$category</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$title</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">author</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$author</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">category</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$category</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #009933; font-style: italic;">/**
 * Defined by ArrayAccess interface
 * Set a value given it's key e.g. $A['title'] = 'foo';
 * @param mixed key (string or integer)
 * @param mixed value
 * @return void
 */</span>
 <span style="color: #000000; font-weight: bold;">function</span> offsetSet<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #990000;">get_object_vars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #009933; font-style: italic;">/**
 * Defined by ArrayAccess interface
 * Return a value given it's key e.g. echo $A['title'];
 * @param mixed key (string or integer)
 * @return mixed value
 */</span>
 <span style="color: #000000; font-weight: bold;">function</span> offsetGet<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #990000;">get_object_vars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #009933; font-style: italic;">/**
 * Defined by ArrayAccess interface
 * Unset a value by it's key e.g. unset($A['title']);
 * @param mixed key (string or integer)
 * @return void
 */</span>
 <span style="color: #000000; font-weight: bold;">function</span> offsetUnset<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #990000;">get_object_vars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #009933; font-style: italic;">/**
 * Defined by ArrayAccess interface
 * Check value exists, given it's key e.g. isset($A['title'])
 * @param mixed key (string or integer)
 * @return boolean
 */</span>
 <span style="color: #000000; font-weight: bold;">function</span> offsetExists<span style="color: #009900;">&#40;</span><span style="color: #000088;">$offset</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$offset</span><span style="color: #339933;">,</span><span style="color: #990000;">get_object_vars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>使用方法如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Create the object</span>
<span style="color: #000088;">$A</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Article<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SPL Rocks'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Joe Bloggs'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'PHP'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Check what it looks like</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Initial State:&lt;div&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$A</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Change the title using array syntax</span>
<span style="color: #000088;">$A</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SPL _really_ rocks'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Try setting a non existent property (ignored)</span>
<span style="color: #000088;">$A</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'not found'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Unset the author field</span>
<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$A</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'author'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Check what it looks like again</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Final State:&lt;div&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$A</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #339933;">;</span></pre></div></div>

<p>运行结果如下：</p>
<pre>Initial State:

Article Object
(
   [title] => SPL Rocks
   [author] => Joe Bloggs
   [category] => PHP
)

Final State:

Article Object
(
   [title] => SPL _really_ rocks
   [category] => PHP
)
</pre>
<p>可以看到，$A虽然是一个object，但是完全可以像array那样操作。</p>
<p>你还可以在读取数据时，增加程序内部的逻辑：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> offsetGet<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #990000;">get_object_vars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #b1b100;">return</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>5. IteratorAggregate界面</strong></p>
<p>但是，虽然$A可以像数组那样操作，却无法使用foreach遍历，除非部署了前面提到的Iterator界面。</p>
<p>另一个解决方法是，有时会需要将数据和遍历部分分开，这时就可以部署IteratorAggregate界面。它规定了一个getIterator()方法，返回一个使用Iterator界面的object。</p>
<p>还是以上一节的Article类为例：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Article implements ArrayAccess<span style="color: #339933;">,</span> IteratorAggregate <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Defined by IteratorAggregate interface
 * Returns an iterator for for this object, for use with foreach
 * @return ArrayIterator
 */</span>
 <span style="color: #000000; font-weight: bold;">function</span> getIterator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></div></div>

<p>使用方法如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$A</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Article<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SPL Rocks'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Joe Bloggs'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'PHP'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Loop (getIterator will be called automatically)</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Looping with foreach:&lt;div&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$A</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$field</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$field</span> : <span style="color: #006699; font-weight: bold;">$value</span>&lt;br&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Get the size of the iterator (see how many properties are left)</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Object has &quot;</span><span style="color: #339933;">.</span><span style="color: #990000;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$A</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getIterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; elements&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>显示结果如下：</p>
<pre>Looping with foreach:

title : SPL Rocks
author : Joe Bloggs
category : PHP

Object has 3 elements</pre>
<p><strong>6. RecursiveIterator界面</strong></p>
<p>这个界面用于遍历多层数据，它继承了Iterator界面，因而也具有标准的current()、key()、next()、 rewind()和valid()方法。同时，它自己还规定了getChildren()和hasChildren()方法。The getChildren() method must return an object that implements RecursiveIterator.</p>
<p><strong>7. SeekableIterator界面</strong></p>
<p>SeekableIterator界面也是Iterator界面的延伸，除了Iterator的5个方法以外，还规定了seek()方法，参数是元素的位置，返回该元素。如果该位置不存在，则抛出OutOfBoundsException。</p>
<p>下面是一个是实例：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> PartyMemberIterator implements SeekableIterator
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>PartyMember <span style="color: #000088;">$member</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Store $member locally for iteration</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> seek<span style="color: #009900;">&#40;</span><span style="color: #000088;">$index</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rewind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$position</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$position</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$index</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$position</span><span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            throw <span style="color: #000000; font-weight: bold;">new</span> OutOfBoundsException<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Invalid position'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Implement current(), key(), next(), rewind()</span>
    <span style="color: #666666; font-style: italic;">// and valid() to iterate over data in $member</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>8. Countable界面</strong></p>
<p>这个界面规定了一个count()方法，返回结果集的数量。</p>
<p><strong>第三部分 SPL Classes</strong></p>
<p><strong>9. SPL的内置类</strong></p>
<p>SPL除了定义一系列Interfaces以外，还提供一系列的内置类，它们对应不同的任务，大大简化了编程。</p>
<p>查看所有的内置类，可以使用下面的代码：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// a simple foreach() to traverse the SPL class names</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">spl_classes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' -&gt; '</span><span style="color: #339933;">.</span><span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>10. DirectoryIterator类</strong></p>
<p>这个类用来查看一个目录中的所有文件和子目录：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
try<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">/*** class create new DirectoryIterator Object ***/</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$Item</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$Item</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">/*** if an exception is thrown, catch it here ***/</span>
catch<span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'No files Found!&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>查看文件的详细信息：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> DirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./'</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$file</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFilename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">==</span> <span style="color: #0000ff;">'foo.txt'</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getFilename()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFilename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getBasename()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getBasename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isDot()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isDot</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;__toString()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span>__toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getPath()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getPathname()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPathname</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getPerms()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPerms</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getInode()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getSize()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getSize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getOwner()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOwner</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;$file-&gt;getGroup()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getGroup</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getATime()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getATime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getMTime()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getCTime()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getCTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getType()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isWritable()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isWritable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isReadable()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isReadable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isExecutable(&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isExecutable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isFile()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isFile</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isDir()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isDir</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;isLink()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isLink</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getFileInfo()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFileInfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;getPathInfo()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPathInfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;openFile()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">openFile</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;setFileClass()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFileClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;tr&gt;&lt;td&gt;setInfoClass()&lt;/td&gt;&lt;td&gt; '</span><span style="color: #339933;">;</span> <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setInfoClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/td&gt;&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>除了foreach循环外，还可以使用while循环：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** create a new iterator object ***/</span>
<span style="color: #000088;">$it</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** loop directly over the object ***/</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' -- '</span><span style="color: #339933;">.</span><span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">/*** move to the next iteration ***/</span>
    <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>如果要过滤所有子目录，可以在valid()方法中过滤：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** create a new iterator object ***/</span>
<span style="color: #000088;">$it</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** loop directly over the object ***/</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">/*** check if value is a directory ***/</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isDir</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">/*** echo the key and current value ***/</span>
                <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' -- '</span><span style="color: #339933;">.</span><span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #666666; font-style: italic;">/*** move to the next iteration ***/</span>
        <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>11. ArrayObject类</strong></p>
<p>这个类可以将Array转化为object。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** a simple array ***/</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** create the array object ***/</span>
<span style="color: #000088;">$arrayObj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayObject<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** iterate over the array ***/</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$iterator</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getIterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">/*** check if valid ***/</span>
   <span style="color: #000088;">$iterator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">/*** move to the next array member ***/</span>
   <span style="color: #000088;">$iterator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/*** output the key and current array value ***/</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$iterator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' =&gt; '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$iterator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>增加一个元素：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dingo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>对元素排序：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">natcasesort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>显示元素的数量：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>删除一个元素：</p>
<pre>$arrayObj->offsetUnset(5);</pre>
<p>某一个元素是否存在：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offsetExists</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
       <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Offset Exists&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>更改某个位置的元素值：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offsetSet</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;galah&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>显示某个位置的元素值：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$arrayObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offsetGet</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>12. ArrayIterator类</strong>这个类实际上是对ArrayObject类的补充，为后者提供遍历功能。</p>
<p>示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** a simple array ***/</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
try <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$object</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$object</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' =&gt; '</span><span style="color: #339933;">.</span><span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>ArrayIterator类也支持offset类方法和count()方法：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;ul&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** a simple array ***/</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
try <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$object</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">/*** check for the existence of the offset 2 ***/</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offSetExists</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/*** set the offset of 2 to a new value ***/</span>
    <span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offSetSet</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Goanna'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
   <span style="color: #666666; font-style: italic;">/*** unset the kiwi ***/</span>
   <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$object</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">/*** check the value of the key ***/</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offSetGet</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">/*** unset the current key ***/</span>
            <span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">offSetUnset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;li&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' - '</span><span style="color: #339933;">.</span><span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/li&gt;'</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;/ul&gt;</pre></div></div>

<p><strong>13. RecursiveArrayIterator类和RecursiveIteratorIterator类</strong></p>
<p>ArrayIterator类和ArrayObject类，只支持遍历一维数组。如果要遍历多维数组，必须先用 RecursiveIteratorIterator生成一个Iterator，然后再对这个Iterator使用 RecursiveIteratorIterator。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'butch'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sex'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'m'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'breed'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'boxer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'fido'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sex'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'m'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'breed'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'doberman'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'girly'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'sex'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'f'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'breed'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'poodle'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> RecursiveIteratorIterator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> RecursiveArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' -- '</span><span style="color: #339933;">.</span><span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>14. FilterIterator类</strong></p>
<p>FilterIterator类可以对元素进行过滤，只要在accept()方法中设置过滤条件就可以了。</p>
<p>示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** a simple array ***/</span>
<span style="color: #000088;">$animals</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'NZ'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> CullingIterator <span style="color: #000000; font-weight: bold;">extends</span> FilterIterator<span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** The filteriterator takes  a iterator as param: ***/</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span> Iterator <span style="color: #000088;">$it</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$it</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** check if key is numeric ***/</span>
<span style="color: #000000; font-weight: bold;">function</span> accept<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">key</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">/*** end of class ***/</span>
<span style="color: #000088;">$cull</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CullingIterator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$animals</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cull</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' == '</span><span style="color: #339933;">.</span><span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>下面是另一个返回质数的例子：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> PrimeFilter <span style="color: #000000; font-weight: bold;">extends</span> FilterIterator<span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** The filteriterator takes  a iterator as param: ***/</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Iterator <span style="color: #000088;">$it</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$it</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** check if current value is prime ***/</span>
<span style="color: #000000; font-weight: bold;">function</span> accept<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$x</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sqrt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$d</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> ? <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">/*** end of class ***/</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** an array of numbers ***/</span>
<span style="color: #000088;">$numbers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">range</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">212345</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">212456</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** create a new FilterIterator object ***/</span>
<span style="color: #000088;">$primes</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> primeFilter<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$numbers</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$primes</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' is prime.&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>15. SimpleXMLIterator类</strong></p>
<p>这个类用来遍历xml文件。</p>
<p>示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** a simple xml tree ***/</span>
 <span style="color: #000088;">$xmlstring</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;&lt;&lt;</span>XML
<span style="color: #000000; font-weight: bold;">&lt;?</span>xml version <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;1.0&quot;</span> encoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span> standalone<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;document&gt;
  &lt;animal&gt;
    &lt;category id=&quot;26&quot;&gt;
      &lt;species&gt;Phascolarctidae&lt;/species&gt;
      &lt;type&gt;koala&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;27&quot;&gt;
      &lt;species&gt;macropod&lt;/species&gt;
      &lt;type&gt;kangaroo&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;28&quot;&gt;
      &lt;species&gt;diprotodon&lt;/species&gt;
      &lt;type&gt;wombat&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;31&quot;&gt;
      &lt;species&gt;macropod&lt;/species&gt;
      &lt;type&gt;wallaby&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;21&quot;&gt;
      &lt;species&gt;dromaius&lt;/species&gt;
      &lt;type&gt;emu&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;22&quot;&gt;
      &lt;species&gt;Apteryx&lt;/species&gt;
      &lt;type&gt;kiwi&lt;/type&gt;
      &lt;name&gt;Troy&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;23&quot;&gt;
      &lt;species&gt;kingfisher&lt;/species&gt;
      &lt;type&gt;kookaburra&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;48&quot;&gt;
      &lt;species&gt;monotremes&lt;/species&gt;
      &lt;type&gt;platypus&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;4&quot;&gt;
      &lt;species&gt;arachnid&lt;/species&gt;
      &lt;type&gt;funnel web&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
      &lt;legs&gt;8&lt;/legs&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
&lt;/document&gt;
XML;
&nbsp;
/*** a new simpleXML iterator object ***/
try    {
       /*** a new simple xml iterator ***/
       $it = new SimpleXMLIterator($xmlstring);
       /*** a new limitIterator object ***/
       foreach(new RecursiveIteratorIterator($it,1) as $name =&gt; $data)
          {
          echo $name.' -- '.$data.'&lt;br /&gt;';
          }
    }
catch(Exception $e)
    {
    echo $e-&gt;getMessage();
    }
?&gt;</pre></div></div>

<p>new RecursiveIteratorIterator($it,1)表示显示所有包括父元素在内的子元素。</p>
<p>显示某一个特定的元素值，可以这样写：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/*** a new simpleXML iterator object ***/</span>
    <span style="color: #000088;">$sxi</span> <span style="color: #339933;">=</span>  <span style="color: #000000; font-weight: bold;">new</span> SimpleXMLIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlstring</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$sxi</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$node</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">species</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>相对应的while循环写法为：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
try <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$sxe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">simplexml_load_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlstring</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'SimpleXMLIterator'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$sxe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rewind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$sxe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$sxe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sxe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasChildren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sxe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getChildren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$element</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
          <span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$value</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">species</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>最方便的写法，还是使用xpath：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/*** a new simpleXML iterator object ***/</span>
    <span style="color: #000088;">$sxi</span> <span style="color: #339933;">=</span>  <span style="color: #000000; font-weight: bold;">new</span> SimpleXMLIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlstring</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*** set the xpath ***/</span>
    <span style="color: #000088;">$foo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$sxi</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">xpath</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'animal/category/species'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*** iterate over the xpath ***/</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$foo</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$v</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>下面的例子，显示有namespace的情况：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** a simple xml tree ***/</span>
 <span style="color: #000088;">$xmlstring</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;&lt;&lt;</span>XML
<span style="color: #000000; font-weight: bold;">&lt;?</span>xml version <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;1.0&quot;</span> encoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span> standalone<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;document xmlns:spec=&quot;http://example.org/animal-species&quot;&gt;
  &lt;animal&gt;
    &lt;category id=&quot;26&quot;&gt;
      &lt;species&gt;Phascolarctidae&lt;/species&gt;
      &lt;spec:name&gt;Speed Hump&lt;/spec:name&gt;
      &lt;type&gt;koala&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;27&quot;&gt;
      &lt;species&gt;macropod&lt;/species&gt;
      &lt;spec:name&gt;Boonga&lt;/spec:name&gt;
      &lt;type&gt;kangaroo&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;28&quot;&gt;
      &lt;species&gt;diprotodon&lt;/species&gt;
      &lt;spec:name&gt;pot holer&lt;/spec:name&gt;
      &lt;type&gt;wombat&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;31&quot;&gt;
      &lt;species&gt;macropod&lt;/species&gt;
      &lt;spec:name&gt;Target&lt;/spec:name&gt;
      &lt;type&gt;wallaby&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;21&quot;&gt;
      &lt;species&gt;dromaius&lt;/species&gt;
      &lt;spec:name&gt;Road Runner&lt;/spec:name&gt;
      &lt;type&gt;emu&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;22&quot;&gt;
      &lt;species&gt;Apteryx&lt;/species&gt;
      &lt;spec:name&gt;Football&lt;/spec:name&gt;
      &lt;type&gt;kiwi&lt;/type&gt;
      &lt;name&gt;Troy&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;23&quot;&gt;
      &lt;species&gt;kingfisher&lt;/species&gt;
      &lt;spec:name&gt;snaker&lt;/spec:name&gt;
      &lt;type&gt;kookaburra&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;48&quot;&gt;
      &lt;species&gt;monotremes&lt;/species&gt;
      &lt;spec:name&gt;Swamp Rat&lt;/spec:name&gt;
      &lt;type&gt;platypus&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
  &lt;animal&gt;
    &lt;category id=&quot;4&quot;&gt;
      &lt;species&gt;arachnid&lt;/species&gt;
      &lt;spec:name&gt;Killer&lt;/spec:name&gt;
      &lt;type&gt;funnel web&lt;/type&gt;
      &lt;name&gt;Bruce&lt;/name&gt;
      &lt;legs&gt;8&lt;/legs&gt;
    &lt;/category&gt;
  &lt;/animal&gt;
&lt;/document&gt;
XML;
&nbsp;
/*** a new simpleXML iterator object ***/
try {
    /*** a new simpleXML iterator object ***/
    $sxi =  new SimpleXMLIterator($xmlstring);
&nbsp;
    $sxi-&gt; registerXPathNamespace('spec', 'http://www.exampe.org/species-title');
&nbsp;
    /*** set the xpath ***/
    $result = $sxi-&gt;xpath('//spec:name');
&nbsp;
    /*** get all declared namespaces ***/
   foreach($sxi-&gt;getDocNamespaces('animal') as $ns)
        {
        echo $ns.'&lt;br /&gt;';
        }
&nbsp;
    /*** iterate over the xpath ***/
    foreach ($result as $k=&gt;$v)
        {
        echo $v.'&lt;br /&gt;';
        }
    }
catch(Exception $e)
    {
    echo $e-&gt;getMessage();
    }
?&gt;</pre></div></div>

<p>增加一个节点：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
 <span style="color: #000088;">$xmlstring</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;&lt;&lt;</span>XML
<span style="color: #000000; font-weight: bold;">&lt;?</span>xml version <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;1.0&quot;</span> encoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span> standalone<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;document&gt;
  &lt;animal&gt;koala&lt;/animal&gt;
  &lt;animal&gt;kangaroo&lt;/animal&gt;
  &lt;animal&gt;wombat&lt;/animal&gt;
  &lt;animal&gt;wallaby&lt;/animal&gt;
  &lt;animal&gt;emu&lt;/animal&gt;
  &lt;animal&gt;kiwi&lt;/animal&gt;
  &lt;animal&gt;kookaburra&lt;/animal&gt;
  &lt;animal&gt;platypus&lt;/animal&gt;
  &lt;animal&gt;funnel web&lt;/animal&gt;
&lt;/document&gt;
XML;
&nbsp;
try {
    /*** a new simpleXML iterator object ***/
    $sxi =  new SimpleXMLIterator($xmlstring);
&nbsp;
    /*** add a child ***/
    $sxi-&gt;addChild('animal', 'Tiger');
&nbsp;
    /*** a new simpleXML iterator object ***/
    $new = new SimpleXmlIterator($sxi-&gt;saveXML());
&nbsp;
    /*** iterate over the new tree ***/
    foreach($new as $val)
        {
        echo $val.'&lt;br /&gt;';
        }
    }
catch(Exception $e)
    {
    echo $e-&gt;getMessage();
    }
?&gt;</pre></div></div>

<p>增加属性：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">$xmlstring =&lt;&lt;&lt;XML
<span style="color: #000000; font-weight: bold;">&lt;?</span>xml version <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;1.0&quot;</span> encoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span> standalone<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;document&gt;
  &lt;animal&gt;koala&lt;/animal&gt;
  &lt;animal&gt;kangaroo&lt;/animal&gt;
  &lt;animal&gt;wombat&lt;/animal&gt;
  &lt;animal&gt;wallaby&lt;/animal&gt;
  &lt;animal&gt;emu&lt;/animal&gt;
  &lt;animal&gt;kiwi&lt;/animal&gt;
  &lt;animal&gt;kookaburra&lt;/animal&gt;
  &lt;animal&gt;platypus&lt;/animal&gt;
  &lt;animal&gt;funnel web&lt;/animal&gt;
&lt;/document&gt;
XML;
&nbsp;
try {
    /*** a new simpleXML iterator object ***/
    $sxi =  new SimpleXMLIterator($xmlstring);
&nbsp;
    /*** add an attribute with a namespace ***/
    $sxi-&gt;addAttribute('id:att1', 'good things', 'urn::test-foo');
&nbsp;
    /*** add an attribute without a  namespace ***/
    $sxi-&gt;addAttribute('att2', 'no-ns');
&nbsp;
    echo htmlentities($sxi-&gt;saveXML());
    }
catch(Exception $e)
    {
    echo $e-&gt;getMessage();
    }</pre></div></div>

<p><strong>16. CachingIterator类</strong></p>
<p>这个类有一个hasNext()方法，用来判断是否还有下一个元素。</p>
<p>示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** a simple array ***/</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/*** create a new object ***/</span>
    <span style="color: #000088;">$object</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CachingIterator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$object</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">','</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>17. LimitIterator类</strong></p>
<p>这个类用来限定返回结果集的数量和位置，必须提供offset和limit两个参数，与SQL命令中limit语句类似。</p>
<p>示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*** the offset value ***/</span>
<span style="color: #000088;">$offset</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** the limit of records to show ***/</span>
<span style="color: #000088;">$limit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$it</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> LimitIterator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$offset</span><span style="color: #339933;">,</span> <span style="color: #000088;">$limit</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$it</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>另一个例子是：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*** a simple array ***/</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'koala'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kangaroo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wombat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wallaby'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'emu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kiwi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kookaburra'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'platypus'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$it</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> LimitIterator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
try
    <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">seek</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$it</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span>OutOfBoundsException <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>18. SplFileObject类</strong></p>
<p>这个类用来对文本文件进行遍历。</p>
<p>示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
try<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// iterate directly over the object</span>
    <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> SplFileObject<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>quot<span style="color: #339933;">;/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>apache<span style="color: #339933;">/</span>logs<span style="color: #339933;">/</span>access_log<span style="color: #339933;">&amp;</span>quot<span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$line</span><span style="color: #009900;">&#41;</span>
    <span style="color: #666666; font-style: italic;">// and echo each line of the file</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$line</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>返回文本文件的第三行，可以这样写：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
try<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SplFileObject<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/usr/local/apache/logs/access_log&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">seek</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.znjack.com/php-spl.html,61/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows下的Memcache</title>
		<link>http://www.znjack.com/windows%e4%b8%8b%e7%9a%84memcache.html,38</link>
		<comments>http://www.znjack.com/windows%e4%b8%8b%e7%9a%84memcache.html,38#comments</comments>
		<pubDate>Wed, 09 Sep 2009 04:15:03 +0000</pubDate>
		<dc:creator>znjack</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.znjack.com/?p=38</guid>
		<description><![CDATA[Windows下的Memcache安装： 1. 下载memcache的windows稳定版，解压放某个盘下面，比如在c:\memcached 2. 在终端（也即cmd命令界面）下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入：&#8217;c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。 4.下载php_memcache.dll(5.2x版本)，请自己查找对应的php版本的文件 5. 在C:\winnt\php.ini 加入一行 &#8216;extension=php_memcache.dll&#8217; 6.重新启动Apache，然后查看一下phpinfo，如果有memcache，那么就说明安装成功！ memcached的基本设置： -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop&#124;shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u 以的身份运行 (仅在以root运行的时候有效) -m 最大内存使用，单位MB。默认64MB -M 内存耗尽时返回错误，而不是删除项 -c 最大同时连接数，默认是1024 -f 块大小增长因子，默认是1.25 -n 最小分配空间，key+value+flags默认是48 [...]]]></description>
			<content:encoded><![CDATA[<p>Windows下的Memcache安装：<br />
1. 下载<a href="http://jehiah.cz/projects/memcached-win32">memcache</a>的windows稳定版，解压放某个盘下面，比如在c:\memcached<br />
2. 在终端（也即cmd命令界面）下输入 ‘c:\memcached\memcached.exe -d install’ 安装<br />
3. 再输入：&#8217;c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。<br />
4.下载<a href="http://downloads.php.net/pierre/php_memcache-5.2-Win32-vc6-x86-20090408.zip">php_memcache.dll(5.2x版本)</a>，请自己查找对应的php版本的文件<br />
5. 在C:\winnt\php.ini 加入一行 &#8216;extension=php_memcache.dll&#8217;<br />
6.重新启动Apache，然后查看一下phpinfo，如果有memcache，那么就说明安装成功！</p>
<p>memcached的基本设置：</p>
<p>-p 监听的端口<br />
-l 连接的IP地址, 默认是本机<br />
-d start 启动memcached服务<br />
-d restart 重起memcached服务<br />
-d stop|shutdown 关闭正在运行的memcached服务<br />
-d install 安装memcached服务<br />
-d uninstall 卸载memcached服务<br />
-u 以的身份运行 (仅在以root运行的时候有效)<br />
-m 最大内存使用，单位MB。默认64MB<br />
-M 内存耗尽时返回错误，而不是删除项<br />
-c 最大同时连接数，默认是1024<br />
-f 块大小增长因子，默认是1.25<br />
-n 最小分配空间，key+value+flags默认是48<br />
-h 显示帮助</p>
<p>Memcache环境测试：<br />
运行下面的php文件，如果有输出This is a test!，就表示环境搭建成功。开始领略Memcache的魅力把！</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$mem</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Memcache<span style="color: #339933;">;</span>
<span style="color: #000088;">$mem</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span>”127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1″<span style="color: #339933;">,</span> <span style="color: #cc66cc;">11211</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mem</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span>’<span style="color: #990000;">key</span>’<span style="color: #339933;">,</span> ‘This is a test<span style="color: #339933;">!</span>’<span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">60</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$val</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mem</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>’<span style="color: #990000;">key</span>’<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$val</span><span style="color: #339933;">;</span></pre></div></div>

<p>为什么要用memcache呢？因为你可以把一些东西缓存进去，比如session，这样就比放在硬盘上速度快多了，如何原来是放在数据库里面的，这样也减少了很多对数据库的操作。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znjack.com/windows%e4%b8%8b%e7%9a%84memcache.html,38/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

