﻿
<?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>好易阁-品味互联网人生 &#187; PHP</title>
	<atom:link href="http://www.helloyi.cn/index.php/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.helloyi.cn</link>
	<description>春色三分,二分尘土,一分流水</description>
	<lastBuildDate>Fri, 30 Sep 2011 08:46:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>MySQL 5.5 版本发布</title>
		<link>http://www.helloyi.cn/index.php/2009/12/16/mysql-5-5/</link>
		<comments>http://www.helloyi.cn/index.php/2009/12/16/mysql-5-5/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 11:33:01 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[互联网观察]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[数据库应用]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3017</guid>
		<description><![CDATA[近日，关于Oracle收购Sun后MySQL将如何发展的问题可谓是热点新闻，很高兴能够看到这个时候mysql还能出个新版 本，而原来的 MySQL 5.4 在官网上已经没有链接，看来是升级为 5.5 版本了，官网上同时还提供一个从 5.4 升级到 5.5 的指南。MySQL 5.5.0是所谓的里程碑版本，这次带来了一些有趣的东西，按照重要程度（我主观上的）列一下: 支持半同步复制，这个是从早期google 的semi-sync patch转过来的，能够做到master-slave的半同步复制 集成Innodb plugin 1.0.6 支持 SQL 标准 SIGNAL 和 RESIGNAL 语句 增强XML功能，支持 LOAD XML 语句 可通过 ALTER TABLE &#8230; TRUNCATE PARTITION 来删除某个表在某个分区上的所有数据 增加了 TO_SECONDS 函数 新的 partition语法 Key caches are now supported for indexes on partitioned MyISAM tables, using the CACHE INDEX [...]]]></description>
			<content:encoded><![CDATA[<div>
<p><img class="size-full wp-image-3032 alignleft" title="mysql" src="http://www.helloyi.cn/wp-content/uploads/2009/12/mysql.jpg" alt="mysql" width="176" height="149" />近日，关于Oracle收购Sun后MySQL将如何发展的问题可谓是热点新闻，很高兴能够看到这个时候mysql还能出个新版 本，而原来的 MySQL 5.4 在官网上已经没有链接，看来是升级为 5.5 版本了，官网上同时还提供一个从 5.4 升级到 5.5 的<a href="http://dev.mysql.com/doc/refman/5.5/en/upgrading-from-previous-series.html" target="_blank">指南</a>。MySQL 5.5.0是所谓的里程碑版本，这次带来了一些有趣的东西，按照重要程度（我主观上的）列一下:</p>
<p><span id="more-3017"></span></p>
<ul>
<li>支持半同步复制，这个是从早期<a href="http://code.google.com/p/google-mysql-tools/wiki/SemiSyncReplicationDesign">google 的semi-sync patch</a>转过来的，能够做到master-slave的半同步复制</li>
<li>集成Innodb plugin 1.0.6</li>
<li>支持 SQL 标准 SIGNAL 和 RESIGNAL 语句</li>
<li>增强XML功能，支持 LOAD XML 语句</li>
<li>可通过 ALTER TABLE &#8230; TRUNCATE PARTITION 来删除某个表在某个分区上的所有数据</li>
<li>增加了 TO_SECONDS 函数</li>
<li><a href="http://dev.mysql.com/doc/refman/5.5/en/partitioning-list.html">新的 partition语法</a></li>
<li>Key caches are now supported for indexes on partitioned MyISAM tables, using the CACHE INDEX and LOAD INDEX INTO CACHE statements</li>
</ul>
<p>这个版本还不适合用在正式环境。想想以后也许可以用<a href="http://www.oschina.net/p/mysqlmmm">mysql mmm</a> + mysql 5.5提供可用性更好的服务，前提是它已经足够稳定，或者是percona版本？</p>
<p>下载地址：<a href="http://dev.mysql.com/downloads/mysql/5.5.html">http://dev.mysql.com/downloads/mysql/5.5.html</a> 来源:开源中国</div>
<p><!-- google_ad_section_end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/12/16/mysql-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL索引类型一览让MySQL高效运行起来</title>
		<link>http://www.helloyi.cn/index.php/2009/10/27/mysql-index/</link>
		<comments>http://www.helloyi.cn/index.php/2009/10/27/mysql-index/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 07:55:44 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2976</guid>
		<description><![CDATA[索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。在数据库表中，对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表： CREATE TABLE mytable(     ID INT NOT NULL,      username VARCHAR(16) NOT NULL    );     我们随机向里面插入了10000条记录，其中有一条：5555, admin。 在查找username=&#8221;admin&#8221;的记录 SELECT * FROM mytable WHERE username=&#8217;admin&#8217;;时，如果在username上已经建立了索引，MySQL无须任何扫描，即准确可找到该记录。相反，MySQL会扫描所有记录，即要查询10000条记录。 索引分单列索引和组合索引。单列索引，即一个索引只包含单个列，一个表可以有多个单列索引，但这不是组合索引。组合索引，即一个索包含多个列。 MySQL索引类型包括： （1）普通索引 这是最基本的索引，它没有任何限制。它有以下几种创建方式： ◆创建索引 CREATE INDEX indexName ON mytable(username(length));  如果是CHAR，VARCHAR类型，length可以小于字段实际长度；如果是BLOB和TEXT类型，必须指定 length，下同。 ◆修改表结构 ALTER mytable ADD INDEX [indexName] ON (username(length))  ◆创建表的时候直接指定 CREATE TABLE mytable(     ID INT NOT NULL,      username VARCHAR(16) NOT NULL,     INDEX [indexName] (username(length))     );   删除索引的语法： DROP INDEX [indexName] ON mytable;  （2）唯一索引 它与前面的普通索引类似，不同的就是：索引列的值必须唯一，但允许有空值。如果是组合索引，则列值的组合必须唯一。它有以下几种创建方式： ◆创建索引 CREATE UNIQUE INDEX indexName ON mytable(username(length))  ◆修改表结构 ALTER mytable ADD UNIQUE [indexName] ON (username(length))  [...]]]></description>
			<content:encoded><![CDATA[<p>索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。在数据库表中，对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表：<span id="more-2976"></span></p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">TABLE</span></strong></span><span> mytable(  </span></span></li>
<li><span> </span></li>
<li><span>ID </span><span><strong><span style="color: #006699;">INT</span></strong></span><span> </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,   </span></li>
<li><span> </span></li>
<li><span>username </span><span><strong><span style="color: #006699;">VARCHAR</span></strong></span><span>(16) </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span> </span></li>
<li><span> </span></li>
<li><span>);  </span></li>
<li><span> </span></li>
</pre>
<p>我们随机向里面插入了10000条记录，其中有一条：5555, admin。</p>
<p>在查找username=&#8221;admin&#8221;的记录 SELECT * FROM mytable WHERE username=&#8217;admin&#8217;;时，如果在username上已经建立了索引，MySQL无须任何扫描，即准确可找到该记录。相反，MySQL会扫描所有记录，即要查询10000条记录。</p>
<p>索引分单列索引和组合索引。单列索引，即一个索引只包含单个列，一个表可以有多个单列索引，但这不是组合索引。组合索引，即一个索包含多个列。</p>
<p>MySQL索引类型包括：</p>
<p><strong>（1）普通索引</strong></p>
<p>这是最基本的索引，它没有任何限制。它有以下几种创建方式：</p>
<p>◆创建索引</p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">INDEX</span></strong></span><span> indexName </span><span><strong><span style="color: #006699;">ON</span></strong></span><span> mytable(username(length)); </span></span></li>
</pre>
<p>如果是CHAR，VARCHAR类型，length可以小于字段实际长度；如果是BLOB和TEXT类型，必须指定 length，下同。</p>
<p>◆修改表结构</p>
<pre>
<li><span><span><strong><span style="color: #006699;">ALTER</span></strong></span><span> mytable </span><span><strong><span style="color: #006699;">ADD</span></strong></span><span> </span><span><strong><span style="color: #006699;">INDEX</span></strong></span><span> [indexName] </span><span><strong><span style="color: #006699;">ON</span></strong></span><span> (username(length)) </span></span></li>
</pre>
<p>◆创建表的时候直接指定</p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">TABLE</span></strong></span><span> mytable(  </span></span></li>
<li><span> </span></li>
<li><span>ID </span><span><strong><span style="color: #006699;">INT</span></strong></span><span> </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,   </span></li>
<li><span> </span></li>
<li><span>username </span><span><strong><span style="color: #006699;">VARCHAR</span></strong></span><span>(16) </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,  </span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">INDEX</span></strong></span><span> [indexName] (username(length))  </span></li>
<li><span> </span></li>
<li><span>);  </span></li>
</pre>
<p>删除索引的语法：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">DROP</span></strong></span><span> </span><span><strong><span style="color: #006699;">INDEX</span></strong></span><span> [indexName] </span><span><strong><span style="color: #006699;">ON</span></strong></span><span> mytable; </span></span></li>
</pre>
<p><strong>（2）唯一索引</strong></p>
<p>它与前面的普通索引类似，不同的就是：索引列的值必须唯一，但允许有空值。如果是组合索引，则列值的组合必须唯一。它有以下几种创建方式：</p>
<p>◆创建索引</p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">UNIQUE</span></strong></span><span> </span><span><strong><span style="color: #006699;">INDEX</span></strong></span><span> indexName </span><span><strong><span style="color: #006699;">ON</span></strong></span><span> mytable(username(length)) </span></span></li>
</pre>
<p>◆修改表结构</p>
<pre>
<li><span><span><strong><span style="color: #006699;">ALTER</span></strong></span><span> mytable </span><span><strong><span style="color: #006699;">ADD</span></strong></span><span> </span><span><strong><span style="color: #006699;">UNIQUE</span></strong></span><span> [indexName] </span><span><strong><span style="color: #006699;">ON</span></strong></span><span> (username(length)) </span></span></li>
</pre>
<p>◆创建表的时候直接指定</p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">TABLE</span></strong></span><span> mytable(  </span></span></li>
<li><span> </span></li>
<li><span>ID </span><span><strong><span style="color: #006699;">INT</span></strong></span><span> </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,   </span></li>
<li><span> </span></li>
<li><span>username </span><span><strong><span style="color: #006699;">VARCHAR</span></strong></span><span>(16) </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,  </span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">UNIQUE</span></strong></span><span> [indexName] (username(length))  </span></li>
<li><span> </span></li>
<li><span>);  </span></li>
</pre>
<p><strong>（3）主键索引</strong></p>
<p>它是一种特殊的唯一索引，不允许有空值。一般是在建表的时候同时创建主键索引：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">TABLE</span></strong></span><span> mytable(  </span></span></li>
<li><span> </span></li>
<li><span>ID </span><span><strong><span style="color: #006699;">INT</span></strong></span><span> </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,   </span></li>
<li><span> </span></li>
<li><span>username </span><span><strong><span style="color: #006699;">VARCHAR</span></strong></span><span>(16) </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,  </span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">PRIMARY</span></strong></span><span> </span><span><strong><span style="color: #006699;">KEY</span></strong></span><span>(ID)  </span></li>
<li><span> </span></li>
<li><span>);  </span></li>
</pre>
<p>当然也可以用 ALTER 命令。记住：一个表只能有一个主键。</p>
<p><strong>（4）组合索引</strong></p>
<p>为了形象地对比单列索引和组合索引，为表添加多个字段：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">CREATE</span></strong></span><span> </span><span><strong><span style="color: #006699;">TABLE</span></strong></span><span> mytable(  </span></span></li>
<li><span> </span></li>
<li><span>ID </span><span><strong><span style="color: #006699;">INT</span></strong></span><span> </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,   </span></li>
<li><span> </span></li>
<li><span>username </span><span><strong><span style="color: #006699;">VARCHAR</span></strong></span><span>(16) </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,  </span></li>
<li><span> </span></li>
<li><span>city </span><span><strong><span style="color: #006699;">VARCHAR</span></strong></span><span>(50) </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span>,  </span></li>
<li><span> </span></li>
<li><span>age </span><span><strong><span style="color: #006699;">INT</span></strong></span><span> </span><span><span style="color: #808080;">NOT</span></span><span> </span><span><span style="color: #808080;">NULL</span></span><span> </span></li>
<li><span> </span></li>
<li><span>);  </span></li>
</pre>
<p>为了进一步榨取MySQL的效率，就要考虑建立组合索引。就是将 name, city, age建到一个索引里：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">ALTER</span></strong></span><span> </span><span><strong><span style="color: #006699;">TABLE</span></strong></span><span> mytable </span><span><strong><span style="color: #006699;">ADD</span></strong></span><span> </span><span><strong><span style="color: #006699;">INDEX</span></strong></span><span> name_city_age (</span><span><strong><span style="color: #006699;">name</span></strong></span><span>(10),city,age); </span></span></li>
</pre>
<p>建表时，usernname长度为 16，这里用 10。这是因为一般情况下名字的长度不会超过10，这样会加速索引查询速度，还会减少索引文件的大小，提高INSERT的更新速度。</p>
<p>如果分别在 usernname，city，age上建立单列索引，让该表有3个单列索引，查询时和上述的组合索引效率也会大不一样，远远低于我们的组合索引。虽然此时有了三个索引，但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。</p>
<p>建立这样的组合索引，其实是相当于分别建立了下面三组组合索引：</p>
<pre>
<li><span><span>usernname,city,age  </span></span></li>
<li><span> </span></li>
<li><span>usernname,city  </span></li>
<li><span> </span></li>
<li><span>usernname  </span></li>
</pre>
<p>为什么没有 city，age这样的组合索引呢？这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引，下面的几个SQL就会用到这个组合索引：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> * </span><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable WHREE username=</span><span><span style="color: #0000ff;">"admin"</span></span><span> </span><span><span style="color: #808080;">AND</span></span><span> city=</span><span><span style="color: #0000ff;">"郑州"</span></span><span> </span></span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> * </span><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable WHREE username=</span><span><span style="color: #0000ff;">"admin"</span></span><span> </span></li>
</pre>
<p>而下面几个则不会用到：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> * </span><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable WHREE age=20 </span><span><span style="color: #808080;">AND</span></span><span> city=</span><span><span style="color: #0000ff;">"郑州"</span></span><span> </span></span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> * </span><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable WHREE city=</span><span><span style="color: #0000ff;">"郑州"</span></span><span> </span></li>
</pre>
<p><strong>（5）建立索引的时机</strong></p>
<p>到这里我们已经学会了建立索引，那么我们需要在什么情况下建立索引呢？一般来说，在WHERE和JOIN中出现的列需要建立索引，但也不完全如此，因为MySQL只对&lt;，&lt;=，=，&gt;，&gt;=，BETWEEN，IN，以及某些时候的LIKE才会使用索引。例如：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> t.</span><span><strong><span style="color: #006699;">Name</span></strong></span><span> </span></span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable t </span><span><span style="color: #ff1493;">LEFT</span></span><span> </span><span><span style="color: #808080;">JOIN</span></span><span> mytable m   </span></li>
<li><span> </span></li>
<li><span><strong><span style="color: #006699;">ON</span></strong></span><span> t.</span><span><strong><span style="color: #006699;">Name</span></strong></span><span>=m.username </span><span><strong><span style="color: #006699;">WHERE</span></strong></span><span> m.age=20 </span><span><span style="color: #808080;">AND</span></span><span> m.city=</span><span><span style="color: #0000ff;">'郑州'</span></span><span> </span></li>
</pre>
<p>此时就需要对city和age建立索引，由于mytable表的userame也出现在了JOIN子句中，也有对它建立索引的必要。</p>
<p>刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时，MySQL不会使用索引。例如下句会使用索引：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> * </span><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable </span><span><strong><span style="color: #006699;">WHERE</span></strong></span><span> username </span><span><span style="color: #808080;">like</span></span><span><span style="color: #0000ff;">'admin%'</span></span><span> </span></span></li>
</pre>
<p>而下句就不会使用：</p>
<pre>
<li><span><span><strong><span style="color: #006699;">SELECT</span></strong></span><span> * </span><span><strong><span style="color: #006699;">FROM</span></strong></span><span> mytable WHEREt </span><span><strong><span style="color: #006699;">Name</span></strong></span><span> </span><span><span style="color: #808080;">like</span></span><span><span style="color: #0000ff;">'%admin'</span></span><span> </span></span></li>
</pre>
<p>因此，在使用LIKE时应注意以上的区别。</p>
<p><strong>（6）索引的不足之处</strong></p>
<p>上面都在说使用索引的好处，但过多的使用索引将会造成滥用。因此索引也会有它的缺点：</p>
<p>◆虽然索引大大提高了查询速度，同时却会降低更新表的速度，如对表进行INSERT、UPDATE和DELETE。因为更新表时，MySQL不仅要保存数据，还要保存一下索引文件。</p>
<p>◆建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重，但如果你在一个大表上创建了多种组合索引，索引文件的会膨胀很快。</p>
<p>索引只是提高效率的一个因素，如果你的MySQL有大数据量的表，就需要花时间研究建立最优秀的索引，或优化查询语句。</p>
<p><strong>（7）使用索引的注意事项</strong></p>
<p>使用索引时，有以下一些技巧和注意事项：</p>
<p>◆索引不会包含有NULL值的列</p>
<p>只要列中包含有NULL值都将不会被包含在索引中，复合索引中只要有一列含有NULL值，那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。</p>
<p>◆使用短索引</p>
<p>对串列进行索引，如果可能应该指定一个前缀长度。例如，如果有一个CHAR(255)的列，如果在前10个或20个字符内，多数值是惟一的，那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。</p>
<p>◆索引列排序</p>
<p>MySQL查询只使用一个索引，因此如果where子句中已经使用了索引的话，那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作；尽量不要包含多个列的排序，如果需要最好给这些列创建复合索引。</p>
<p>◆like语句操作</p>
<p>一般情况下不鼓励使用like操作，如果非使用不可，如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。</p>
<p>◆不要在列上进行运算</p>
<pre>
<li><span><span><strong><span style="color: #006699;">select</span></strong></span><span> * </span><span><strong><span style="color: #006699;">from</span></strong></span><span> users </span><span><strong><span style="color: #006699;">where</span></strong></span><span> </span><span><span style="color: #ff1493;">YEAR</span></span><span>(adddate)&lt;2007; </span></span></li>
</pre>
<p>将在每个行上进行运算，这将导致索引失效而进行全表扫描，因此我们可以改成</p>
<pre>
<li><span><span><strong><span style="color: #006699;">select</span></strong></span><span> * </span><span><strong><span style="color: #006699;">from</span></strong></span><span> users </span><span><strong><span style="color: #006699;">where</span></strong></span><span> adddate&lt;‘2007-01-01’;  </span></span></li>
</pre>
<p>◆不使用NOT IN和&lt;&gt;操作</p>
<p>以上，就对其中MySQL索引类型进行了介绍。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/10/27/mysql-index/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP6将全面支持Unicode和国际化</title>
		<link>http://www.helloyi.cn/index.php/2009/10/26/php6-unicode/</link>
		<comments>http://www.helloyi.cn/index.php/2009/10/26/php6-unicode/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 11:54:02 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[互联网观察]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2970</guid>
		<description><![CDATA[PHP核心开发者Andrei Zmievski在最近举行的2009 Zend/PHP会议的主题发言中提出：“在接下来的PHP6重要升级中，将通过支持Unicode来帮助开发者们写出能够部署到多个不同语言市场的应用程序。”  商业开发中如果只是开发为特语言市场的应用程序，就会失去其他地方的商业机会。早在2006年4月，Andrei Zmievski就提出未来需要支持Unicode，而且他认为这件事早就应该做了。所谓Unicode就是不论什么平台，什么语言，都使用统一的编码，对于PHP6，包括string类型在内，都将是Unicode内置的。 　　PHP6的Unicode使得写出能处理各种语言和编码的应用程序更容易，比如很容易就可以写出一个同时支持中、日、英文的应用程序，以同时面对来自中国、日本和英语国家的用户。 　　PHP增强了国际化是件一直令人期待，让人高兴的事情，特别是对那些不是美国和英国本土出生的软件开发者和使用PHP网站提供服务的企业主，包括持续增长的中国外贸企业站点。一些提供PHP内容管理系统的厂商也反映目前的PHP版本支持国际化非常困难，因此即将升级的国际化对他们非常有帮助。 　　从PHP的官方网站上看到 PHP的Unicode Completion Stats截至今日为70%左右，但PHP核心开发者仍然需要完成在cookie访问和PDO (PHP Database Objects)等方面的Unicode开发。Zmievski说：“这部分完成后，我们会在一些知名的应用程序和框架上测试PHP6，比如 Drupal。” 　　PHP核心开发者Gutsman表示，PHP现在的应用更加广泛了，经济不景气反而加速了开源和PHP的使用，因为在经济衰退中，公司不得不增加生产性，降低成本，而PHP恰好能做到这一点。 　　同样是Web开发语言和平台的重要一支，Java方面的发展，最初的企业级Java由于不适合Web负载，已经逐步被流行的轻量级框架如Spring等取代，有一些Java开发者也转向PHP这样的动态语言，因此国际化的支持对于PHP阵营的壮大将起到更大的作用。但对于互联网的实现载体，Web开发语言 /平台，它们的生命力本身就来源于随着互联网的发展而不断的进化和发展，无论是PHP支持了Unicode还是Java变得更加轻巧，都是如此。 　　值得关注的是，PHP6也将改善数字的处理，包括长型数字。另外traits，区别于类的垂直继承，一个能够水平重用代码的功能也在考虑中，开发者将不需要处理多重继承就可以追加功能。 　　Zend上周也宣布了Zend&#8217;s PHP IDE——Zend Studio 7.1的beta版，该版本提供了远程服务器的支持，并且集成了任务的支持。7.1版计划在2009年末正式提供。 　　关于PHP6对于Unicode的更详细内容可以参考PHP官方站点以及Andrei Zmievski的站点中提供的发言文档，最新的PHP6的开发版本可以从http://snaps.php.net/获得。]]></description>
			<content:encoded><![CDATA[<p>PHP核心开发者Andrei Zmievski在最近举行的2009 Zend/PHP会议的主题发言中提出：“在接下来的PHP6重要升级中，将通过支持Unicode来帮助开发者们写出能够部署到多个不同语言市场的应用程序。”</p>
<p><span id="more-2970"></span> 商业开发中如果只是开发为特语言市场的应用程序，就会失去其他地方的商业机会。早在2006年4月，Andrei Zmievski就提出未来需要支持Unicode，而且他认为这件事早就应该做了。所谓Unicode就是不论什么平台，什么语言，都使用统一的编码，对于PHP6，包括string类型在内，都将是Unicode内置的。</p>
<p>　　PHP6的Unicode使得写出能处理各种语言和编码的应用程序更容易，比如很容易就可以写出一个同时支持中、日、英文的应用程序，以同时面对来自中国、日本和英语国家的用户。</p>
<p>　　PHP增强了国际化是件一直令人期待，让人高兴的事情，特别是对那些不是美国和英国本土出生的软件开发者和使用PHP网站提供服务的企业主，包括持续增长的中国外贸企业站点。一些提供PHP内容管理系统的厂商也反映目前的PHP版本支持国际化非常困难，因此即将升级的国际化对他们非常有帮助。</p>
<p>　　从PHP的官方网站上看到 PHP的Unicode Completion Stats截至今日为70%左右，但PHP核心开发者仍然需要完成在cookie访问和PDO (PHP Database Objects)等方面的Unicode开发。Zmievski说：“这部分完成后，我们会在一些知名的应用程序和框架上测试PHP6，比如 Drupal。”</p>
<p>　　PHP核心开发者Gutsman表示，PHP现在的应用更加广泛了，经济不景气反而加速了开源和PHP的使用，因为在经济衰退中，公司不得不增加生产性，降低成本，而PHP恰好能做到这一点。</p>
<p>　　同样是Web开发语言和平台的重要一支，Java方面的发展，最初的企业级Java由于不适合Web负载，已经逐步被流行的轻量级框架如Spring等取代，有一些Java开发者也转向PHP这样的动态语言，因此国际化的支持对于PHP阵营的壮大将起到更大的作用。但对于互联网的实现载体，Web开发语言 /平台，它们的生命力本身就来源于随着互联网的发展而不断的进化和发展，无论是PHP支持了Unicode还是Java变得更加轻巧，都是如此。</p>
<p>　　值得关注的是，PHP6也将改善数字的处理，包括长型数字。另外traits，区别于类的垂直继承，一个能够水平重用代码的功能也在考虑中，开发者将不需要处理多重继承就可以追加功能。</p>
<p>　　Zend上周也宣布了Zend&#8217;s PHP IDE——Zend Studio 7.1的beta版，该版本提供了远程服务器的支持，并且集成了任务的支持。7.1版计划在2009年末正式提供。</p>
<p>　　关于PHP6对于Unicode的更详细内容可以参考PHP官方站点以及Andrei Zmievski的站点中提供的发言文档，最新的PHP6的开发版本可以从<a href="http://snaps.php.net/">http://snaps.php.net/</a>获得。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/10/26/php6-unicode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>搜狐新增国内mysql下载镜像</title>
		<link>http://www.helloyi.cn/index.php/2009/10/16/mirrors-mysql/</link>
		<comments>http://www.helloyi.cn/index.php/2009/10/16/mirrors-mysql/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 10:12:05 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[免费资源]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[数据库应用]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2957</guid>
		<description><![CDATA[http://mirrors.sohu.com/mysql/  搜狐新增国内mysql下载镜像站点]]></description>
			<content:encoded><![CDATA[<p><a title="http://mirrors.sohu.com/mysql/" href="http://mirrors.sohu.com/mysql/">http://mirrors.sohu.com/mysql/</a>  搜狐新增国内mysql下载镜像站点</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/10/16/mirrors-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.10 Beta发布</title>
		<link>http://www.helloyi.cn/index.php/2009/10/06/ubuntu-9-10-beta/</link>
		<comments>http://www.helloyi.cn/index.php/2009/10/06/ubuntu-9-10-beta/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 12:52:47 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[酷软推荐]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2946</guid>
		<description><![CDATA[最受欢迎的Linux桌面发行版Ubuntu发布Ubuntu 9.10的首个Beta版本。 桌面版本主要是速度更快，缩短了启动时间，使启动体验得以改善。而服务版本在安装程序中整合了Ubuntu Enterprise Cloud设置，使用AppArmor改进系统安全。Ubuntu 9.10家族的不同版本：Kubuntu、Xubuntu、Edubuntu、Ubuntu Studio、和Mythbuntu都已进入Beta发布状态。桌面版本的特性包括： GNOME 2.28默认使用Empathy提供即时信息服务（取代原来的Pidgin），Ubuntu软件中心取代了应用程序菜单中的增加/删除功能（Add /Remove），Linux kernel 2.6.31，ext4默认文件系统，默认的引导程序GRUB 2，改进了iSCSI安装进程，用AppArmor初始化启动&#8230;.. 下载：Intel x86，64-bit]]></description>
			<content:encoded><![CDATA[<div>
<p>最受欢迎的Linux桌面发行版Ubuntu发布Ubuntu 9.10的首个Beta版本。 桌面版本主要是速度更快，缩短了启动时间，使启动体验得以改善。而服务版本在安装程序中整合了Ubuntu Enterprise Cloud设置，使用AppArmor改进系统安全。Ubuntu 9.10家族的不同版本：Kubuntu、Xubuntu、Edubuntu、Ubuntu Studio、和Mythbuntu都已进入Beta发布状态。桌面版本的特性包括：</p>
<p><span id="more-2946"></span>GNOME 2.28默认使用Empathy提供即时信息服务（取代原来的Pidgin），Ubuntu软件中心取代了应用程序菜单中的增加/删除功能（Add /Remove），Linux kernel 2.6.31，ext4默认文件系统，默认的引导程序GRUB 2，改进了iSCSI安装进程，用AppArmor初始化启动&#8230;..</p>
<p>下载：<a href="http://nz2.releases.ubuntu.com/9.10/ubuntu-9.10-beta-desktop-i386.iso">Intel x86</a>，<a href="http://nz2.releases.ubuntu.com/9.10/ubuntu-9.10-beta-desktop-amd64.iso">64-bit</a></div>
<p><!-- google_ad_section_end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/10/06/ubuntu-9-10-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开源编辑器FCKeditor 2.6.5 发布</title>
		<link>http://www.helloyi.cn/index.php/2009/09/23/fckeditor-2-6-5/</link>
		<comments>http://www.helloyi.cn/index.php/2009/09/23/fckeditor-2-6-5/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 09:05:23 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[免费资源]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[文档工具]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2927</guid>
		<description><![CDATA[FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化，不需要太复杂的安装步骤即可使用。它可和PHP、JavaScript、 ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。“FCKeditor”名称中的“FCK” 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。FCKeditor 相容于绝大部分的网页浏览器，像是：Internet Explorer 5.5+ (Windows)、Mozilla Firefox 1.0+、Mozilla 1.3+ 、 Opera9.50+和 Netscape 7+。 下载: http://sourceforge.net/projects/fckeditor/files/FCKeditor/2.6.5/FCKeditor_2.6.5.tar.gz/download http://sourceforge.net/projects/fckeditor/files/FCKeditor/2.6.5/FCKeditor_2.6.5.zip/download]]></description>
			<content:encoded><![CDATA[<p>FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化，不需要太复杂的安装步骤即可使用。它可和PHP、JavaScript、 ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。“FCKeditor”名称中的“FCK” 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。FCKeditor 相容于绝大部分的网页浏览器，像是：Internet Explorer 5.5+ (Windows)、Mozilla Firefox 1.0+、Mozilla 1.3+ 、 Opera9.50+和 Netscape 7+。</p>
<p><span id="more-2927"></span><strong><span style="color: #0000ff;">下载:</span></strong></p>
<p><strong><span style="color: #0000ff;">http://sourceforge.net/projects/fckeditor/files/FCKeditor/2.6.5/FCKeditor_2.6.5.tar.gz/download</span></strong></p>
<p><strong><span style="color: #0000ff;">http://sourceforge.net/projects/fckeditor/files/FCKeditor/2.6.5/FCKeditor_2.6.5.zip/download</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/09/23/fckeditor-2-6-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Studio 7.0快捷键大全</title>
		<link>http://www.helloyi.cn/index.php/2009/09/11/zend-studio-7-shortcut-key/</link>
		<comments>http://www.helloyi.cn/index.php/2009/09/11/zend-studio-7-shortcut-key/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 07:44:12 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[酷软推荐]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2904</guid>
		<description><![CDATA[Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift+Ctrl+Enter 在当前行插入空行(原理同上条) Ctrl+Q 定位到最后编辑的地方 Ctrl+L 定位在某行 (对于程序超过100的人就有福音了) Ctrl+M 最大化当前的Edit或View (再按则反之) Ctrl+/ 注释当前行,再按则取消注释 Ctrl+O 快速显示 OutLine Ctrl+T 快速显示当前类的继承结构 Ctrl+W 关闭当前Editer Ctrl+K 参照选中的Word快速定位到下一个 Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示) Ctrl+/(小键盘) 折叠当前类中的所有代码 Ctrl+×(小键盘) 展开当前类中的所有代码 Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替) Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作) Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #333399;">Ctrl+1 快速修复(最经典的快捷键,就不用多说了)<br />
Ctrl+D: 删除当前行<br />
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)<br />
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)<br />
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br />
Alt+↑ 当前行和上面一行交互位置(同上)<br />
Alt+← 前一个编辑的页面</span></p>
<p><span style="color: #333399;"><span id="more-2904"></span>Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)<br />
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性<br />
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br />
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)<br />
Ctrl+Q 定位到最后编辑的地方<br />
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)<br />
Ctrl+M 最大化当前的Edit或View (再按则反之)<br />
Ctrl+/ 注释当前行,再按则取消注释<br />
Ctrl+O 快速显示 OutLine<br />
Ctrl+T 快速显示当前类的继承结构<br />
Ctrl+W 关闭当前Editer<br />
Ctrl+K 参照选中的Word快速定位到下一个<br />
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)<br />
Ctrl+/(小键盘) 折叠当前类中的所有代码<br />
Ctrl+×(小键盘) 展开当前类中的所有代码<br />
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)<br />
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)<br />
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)<br />
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)<br />
Ctrl+Shift+F4 关闭所有打开的Editer<br />
Ctrl+Shift+X 把当前选中的文本全部变为大写<br />
Ctrl+Shift+Y 把当前选中的文本全部变为小写<br />
Ctrl+Shift+F 格式化当前代码<br />
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/09/11/zend-studio-7-shortcut-key/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>资深专家对于学好PHP的十点建议</title>
		<link>http://www.helloyi.cn/index.php/2009/08/14/expert-to-study-php-10-advise/</link>
		<comments>http://www.helloyi.cn/index.php/2009/08/14/expert-to-study-php-10-advise/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 07:57:49 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络知识]]></category>
		<category><![CDATA[网页设计]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2863</guid>
		<description><![CDATA[1. 在合适的时候使用PHP &#8211; Rasmus Lerdorf 没有谁比PHP的创建者Rasmus Lerdorf明白PHP用在什么地方是更合理的， 他于1995年发布了PHP这门语言，从那时起，PHP就像燎原之火，烧遍了整个开发阵营，改变了互联网的世界。 可是，Rasmus并不是因此而创建PHP的。PHP是为了解决web开发者的实际问题而诞生的。 和许多开源项目一样，PHP变得流行，流行的动机并不能用正常的哲学来进行解释，甚至流行得有些孤芳自赏。它完全可以作为一个案例，一个解决各种web问题的工具需求所引起的案例，因此当PHP刚出现的时候，这种工具需求全部聚焦到PHP的身上。 但是，你不能奢望PHP可以解决所有问题。Lerdorf是第一个承认PHP只是一种工具的人，并且PHP也有很多力所不能及的情况。 根据工作的不同来选择合适的工具。我跑了很多家公司，为了说服他们部署和使用PHP，但是这并不意味着PHP对所有问题都适用。它只是可以一个解决大部分问题的front－end脚步语言。 作为一个web开发者，尝试用PHP解决所有问题是不科学的，同时也会浪费你的时间。当PHP玩不转的时候，不要犹豫，试用一下其他的语言吧。 2. 使用多表存储提高规模伸缩性 &#8211; Matt Mullenweg 没有人愿意质疑Matt Mullenweg在PHP方面的权威性，他开发了这个星球上最流行的blog系统,(依靠一个强大的社区力量支持)：Wordpress. 创建Wordpress以后，Matt和他的团队启动了Wordpress.com平台，一个基于Wordpress MU的免费blog站点。现在，Wordpress.com已经拥有大约400万用户， 这些用户每天提供超过 140,000篇的日志。 (要查看更多Wordpress.com的统计情况，请点击这里.) 如果有人知道如何让网站的规模伸缩自如，这个人一定是Matt Mullenweg。2006年的时候Matt对Wordpress的数据结构进行了前瞻性的改进，并且解释了为什么Wordpress MU对每个blog使用独立的MYSQL表格， 而不是把所有的blog数据都塞进一个巨大的表格。 我们测试过这个方法，但是发现如果要扩展它的伸缩性，代价太高。如果用一个整体的数据结构，在大流量面前，你将会面临服务器硬件的问题。在MU里面。用户们都被分布到独立的表格当中，并且可以轻易地组织起来。举个例子，WordPress.com把用户的数据分散存储到4096个数据库中，这些数据库可以分散大规模的数据访问，实现流量和压力分流。 数据表的可迁移性让代码（blog）可以运行得更快，并且让系统具备更强的伸缩性。依靠强大的缓存策略和灵活的数据库运用策略， Matt向人们展示了时下最流行的Facebook和Wordpress.com都可以在PHP下稳定运行，并且处理惊人的访问量。 3. 千万不要相信用户 &#8211; Dave Child Dave Child是Added Bytes(previouslyilovejackdaniels.com) 网站的核心人物，这个网站以他出色的《cheat sheets for many programming languages》而闻名。 Dave为很多英国的公司服务，并且已经在编程世界里树立起相当的权威。 Dave为PHP开发者提供了很多深谋远虑的建议，并总结成了《writing secure code in PHP》：千万不要相信你的用户，他们甚至可能会伤害你。 有一条web开发的基本原则，我重复多少遍都觉得不够，那就是：千万不要相信你的用户，同时要假设你网站中的每个数据单元都是从用户那里收集来的恶意代码。很多时候，你必须用javascript在客户端检验表单提交过来的内容，如果你习惯了如此，那么，这是一个好习惯。如果安全性对你来说很重要，这就是最重要最需要学习的原则。 Dave目前正致力于为它的《Writing Secure [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">1. 在合适的时候使用PHP &#8211; Rasmus Lerdorf</span></strong></p>
<p style="text-indent: 2em;">没有谁比PHP的创建者Rasmus Lerdorf明白PHP用在什么地方是更合理的， 他于1995年发布了PHP这门语言，从那时起，PHP就像燎原之火，烧遍了整个开发阵营，改变了互联网的世界。 可是，Rasmus并不是因此而创建PHP的。PHP是为了解决web开发者的实际问题而诞生的。</p>
<p style="text-indent: 2em;"><span id="more-2863"></span>和许多开源项目一样，PHP变得流行，流行的动机并不能用正常的哲学来进行解释，甚至流行得有些孤芳自赏。它完全可以作为一个案例，一个解决各种web问题的工具需求所引起的案例，因此当PHP刚出现的时候，这种工具需求全部聚焦到PHP的身上。</p>
<p style="text-indent: 2em;">但是，你不能奢望PHP可以解决所有问题。Lerdorf是第一个承认PHP只是一种工具的人，并且PHP也有很多力所不能及的情况。</p>
<p style="text-indent: 2em;">根据工作的不同来选择合适的工具。我跑了很多家公司，为了说服他们部署和使用PHP，但是这并不意味着PHP对所有问题都适用。它只是可以一个解决大部分问题的front－end脚步语言。</p>
<p style="text-indent: 2em;">作为一个web开发者，尝试用PHP解决所有问题是不科学的，同时也会浪费你的时间。当PHP玩不转的时候，不要犹豫，试用一下其他的语言吧。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">2. 使用多表存储提高规模伸缩性 &#8211; Matt Mullenweg</span></strong></p>
<p style="text-indent: 2em;">没有人愿意质疑Matt Mullenweg在PHP方面的权威性，他开发了这个星球上最流行的blog系统,(依靠一个强大的社区力量支持)：Wordpress. 创建Wordpress以后，Matt和他的团队启动了Wordpress.com平台，一个基于Wordpress MU的免费blog站点。现在，Wordpress.com已经拥有大约400万用户， 这些用户每天提供超过 140,000篇的日志。 (要查看更多Wordpress.com的统计情况，请点击这里.)</p>
<p style="text-indent: 2em;">如果有人知道如何让网站的规模伸缩自如，这个人一定是Matt Mullenweg。2006年的时候Matt对Wordpress的数据结构进行了前瞻性的改进，并且解释了为什么Wordpress MU对每个blog使用独立的MYSQL表格， 而不是把所有的blog数据都塞进一个巨大的表格。</p>
<p style="text-indent: 2em;">我们测试过这个方法，但是发现如果要扩展它的伸缩性，代价太高。如果用一个整体的数据结构，在大流量面前，你将会面临服务器硬件的问题。在MU里面。用户们都被分布到独立的表格当中，并且可以轻易地组织起来。举个例子，WordPress.com把用户的数据分散存储到4096个数据库中，这些数据库可以分散大规模的数据访问，实现流量和压力分流。</p>
<p style="text-indent: 2em;">数据表的可迁移性让代码（blog）可以运行得更快，并且让系统具备更强的伸缩性。依靠强大的缓存策略和灵活的数据库运用策略， Matt向人们展示了时下最流行的Facebook和Wordpress.com都可以在PHP下稳定运行，并且处理惊人的访问量。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">3. 千万不要相信用户 &#8211; Dave Child</span></strong></p>
<p style="text-indent: 2em;">Dave Child是Added Bytes(previouslyilovejackdaniels.com) 网站的核心人物，这个网站以他出色的《cheat sheets for many programming languages》而闻名。 Dave为很多英国的公司服务，并且已经在编程世界里树立起相当的权威。</p>
<p style="text-indent: 2em;">Dave为PHP开发者提供了很多深谋远虑的建议，并总结成了《writing secure code in PHP》：千万不要相信你的用户，他们甚至可能会伤害你。</p>
<p style="text-indent: 2em;">有一条web开发的基本原则，我重复多少遍都觉得不够，那就是：千万不要相信你的用户，同时要假设你网站中的每个数据单元都是从用户那里收集来的恶意代码。很多时候，你必须用javascript在客户端检验表单提交过来的内容，如果你习惯了如此，那么，这是一个好习惯。如果安全性对你来说很重要，这就是最重要最需要学习的原则。</p>
<p style="text-indent: 2em;">Dave目前正致力于为它的《Writing Secure PHP》系列书籍整理实例，书的最后他说:</p>
<p style="text-indent: 2em;">最后，变得偏执一点吧。除非你认为你的站点永远不会受到攻击，否则就正视所有的问题，当问题真正发生的时候，你的情况会变得很糟。你需要把每个用户都看成会带来一场攻防站的黑客，想尽一切办法来保护站点的安全，同时想好相应问题的解决方案。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">4. 多使用PHP缓存 &#8211; Ben Balbo</span></strong></p>
<p style="text-indent: 2em;">Ben Balbo开发了Site Point，一个为developers和designers提供指导的网站。他是墨尔本PHP开发和开源俱乐部的成员， 因此他对PHP有一定的了解，同时对PHP caching有一定的想法和经验。</p>
<p style="text-indent: 2em;">如果你拥有一个访问量很大，但更新并不频繁的站点（比如blog，基于某种CMS），或许它需要进行一些改造，这些改造不会花费太多的时间，但是对性能有突出的贡献。 如果要为一个复杂／更新频率很快的站点建立缓存机制，过程可能会很曲折，但是好处也是显而易见的。</p>
<p style="text-indent: 2em;">PHP缓存技术有很多种，Ben为我们推荐了如下一些:</p>
<p style="text-indent: 2em;">缓存函数的运行结果</p>
<p style="text-indent: 2em;">设置过期时间</p>
<p style="text-indent: 2em;">缓存IE下载的文件</p>
<p style="text-indent: 2em;">模板缓存技术</p>
<p style="text-indent: 2em;">Cache_Lite</p>
<p style="text-indent: 2em;">由于PHP作为动态语言的特性，缓存机制对于更新频率并不快的站点来说非常重要。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">5. 使用IDE, Templates和Snippets加速PHP开发 &#8211; Chad Kieffer</span></strong></p>
<p style="text-indent: 2em;">当Chad Kieffer从UI设计和数据库优化的工作中抽身出来的时候，他会在他的博客2 tablespoons上分享很多技术经验。由于Chad多方面的全面发展，他经常可以发现其他程序员不能发现的问题，并形成相关经验，尤其是他开发网站的方法。他参与了网站开发的各个环节，因此他的建议对于提高网站开发的大局观非常有用。</p>
<p style="text-indent: 2em;">Chad认为使用Eclipse PDT</p>
<p style="text-indent: 2em;">(Eclipse&#8217;s PHP development package) 这样的IDE，同时使用一些模板技术和开源项目可以有效地提高PHP的开发速度。</p>
<p style="text-indent: 2em;">紧凑的计划，长长的to do lists以及deadlines让开发人员非常苦闷。不过有些功能，比如Eclipse Templates，可以有效减少编码的时间和出错的几率。</p>
<p style="text-indent: 2em;">通常来说，任何项目都可以自动化，自动化程度越高，你完成项目的时间就越短。花时间来开发使用频率很高的框架和模板，将会节省你以后更多时间。同时，使用像Eclipse and the PDT package这样的IDE，你会发现效率得到明显提高，IDE可以自动闭合，补全分号并且可以在本地debug。</p>
<p style="text-indent: 2em;">Related posts:</p>
<p style="text-indent: 2em;">wordpress成功升级到2.3.2虽然tag对我来说没什么用，但是着眼于安全性，我还是升级了，从两年前的2.0.5升级到现在的2.3.2，着实需要一份勇气和决心，幸好在本地跑升级的时候没有出现任何问题，只是模板上的功能需要一些简单的修改。 线上的升级一切顺利，很多人会纳闷，你刚才不是还发post求助升级办法么？嗯，我已经找到了最好的工具，WordPress Automatic Upgrade plugin 这款wordpress的自动升级插件真正让你升级无忧，因为它会在升级之前为你备份所有的文件和数据，用起来也是“一路next”型，相信很适合那些不想为升级烦心的blogger们，不过有个问题，升级以后的export功能出现问题，提示找不到wp-config.php，不知道是普遍有此问题还是我blog的问题，遇到同样问题的朋友请给我留言，我来研究一下解决办法。（经过研究发现，原来是coolcode插件中访问路径的问题，只要取消此插件的激活，Export功能就可以正常使用了） &#8230;</p>
<p style="text-indent: 2em;">谁有从Wordpress2.0升级的经历今天下载了wordpress-2.3.2，本来想升级，但是发现版本跨越不小，数据结构变化貌似不小，升级比较麻烦，风险太大，所以暂时放弃，哪位朋友有从wordpress2.0升到2.3的经验，分享一下吧，感激不尽。 &#8230;</p>
<p style="text-indent: 2em;">翻译：《14个绝佳的站长工具》（下）原文：<a href="http://www.conversion-rate-experts.com/articles/understanding-your">http://www.conversion-rate-experts.com/articles/understanding-your</a>- visitors/ 此文是由Andrew(<a href="http://www.achome.cn/">http://www.achome.cn</a>)自主翻译的，如需转载请注明出处。用户是最好的宣传和销售人员，来听听他们是如何宣传的吧，Tell-a-Friend King—立即体验! 你是否拥有一个用户推荐的系统？一个可以让用户发信邀请朋友的系统。我们可以看到, 这些用户发的信里面包含“为什么用户在您的网站上消费”这个问题的答案。很多人花费大量的时间来进行自我定位和制定吸引人的广告词，但通过用户的推荐信，你就可以找到用户为什么青睐你的原因。 轻松收集用户反馈， Kampyle—立即体验! Kampyle可以让用户在你的网站上提交用户反馈（通过页面底部的一个小button），点击以后会弹出一个窗口让用户填写他们的意见和建议。站长们可以登录Kampyle的官网去查看和管理收集到的用户反馈，如果用户留下了email地址，站长们还可以轻易地通知用户，他们已经收到反馈并将进行相应的改进。&#8230;</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">6. 利用好PHP的过滤函数 &#8211; Joey Sochacki</span></strong></p>
<p style="text-indent: 2em;">或许Joey Sochacki并不像Matt Mullenweg那样有名 ，但他也是一个经验丰富的开发者，并且通过他的博客Devolio分享了很多技术经验</p>
<p style="text-indent: 2em;">Joey发现在编写php代码的过程中有很多地方需要进行过滤，但却并没有太多的coder关注php的内置过滤函数。</p>
<p style="text-indent: 2em;">过滤数据是我们经常需要做的事情，但是很多功能丰富的PHP内置过滤函数却不为人知。使用类似filter_* 的PHP内置函数，我们几乎可以处理所有的过滤任务，包括数据类型验证／URL／email和IP地址验证／特殊字符处理等等。</p>
<p style="text-indent: 2em;">过滤是一件复杂的事情，但是我相信joey的发现会给你很多启发，让你认识到PHP强大的过滤功能。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">7. 使用PHP框架 &#8211; Josh Sharp</span></strong></p>
<p style="text-indent: 2em;">对于是否应该使用Zend,CakePHP,Code Igniter, 或者其他PHP框架，一直存在着很多争议，但是在web开发者的心中，他们有自己衡量的标准。</p>
<p style="text-indent: 2em;">Josh Sharp自己创建了一家提供面包和黄油服务的网站，因此他对于使用PHP框架来开发网站有一定的经验。他认为使用一个PHP框架来进行项目开发（use a PHP framework），可以有效地节省时间，并且减少出错的几率。为什么？因为他觉得PHP实在是太好上手了。</p>
<p style="text-indent: 2em;">PHP的易于使用有时候也有缺陷，因为并不严格的语法，经常会导致很多错误代码的诞生。但如果使用一个PHP框架，出错的几率就会大大减少。</p>
<p style="text-indent: 2em;">PHP框架可以让你的代码结构更加规范，并且节省大量时间，你可以阅读《benefit of using a PHP framework》来获得更多相关信息。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">8. 不要使用PHP框架 &#8211; Rasmus Lerdorf</span></strong></p>
<p style="text-indent: 2em;">与Josh的观点恰恰相反， PHP的鼻祖Rasmus Lerdorf却认为最好不要使用PHP框架，为什么？因为不基于框架的PHP性能更好。</p>
<p style="text-indent: 2em;">Rasmus在Drupalcon 2008的演讲上，用“Hello World”的例子来对比了一些框架PHP和简单PHP之间的性能，结果显示框架PHP的性能要远远落后。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">9. 使用批处理 &#8211; Jack D. Herrington</span></strong></p>
<p style="text-indent: 2em;">Jack Herrington对PHP世界并不陌生， 并且为大名鼎鼎的IBM developerWorks贡献过超过30篇的专搞， 同时出版过《PHP Hacks》的书，因此他是一个真正的专家。</p>
<p style="text-indent: 2em;">Herrington 推荐使用批处理和Cron来代替那些可以运行在后台的程序脚步，web用户并不愿意在线等待你的处理过程，所以有些事情更适合放到后台来处理。</p>
<p style="text-indent: 2em;">诚然，在某些情况下，这有点大材小用了，但是你可以清楚地看到，使用Cron, MySQL, PHP面向对象的方法以及Pear::DB这些便捷的工具来创建一个批处理工具并不是一件复杂的事情。</p>
<p style="text-indent: 2em;">Jack认为使用cron, PHP和MySQL在后台处理一些任务，比起多进程的业务逻辑要划算得多。</p>
<p style="text-indent: 2em;">两种方法我都尝试过，我认为Cron非常符合”Keep It Simple, Stupid” (KISS) 的原则，它让后台处理变得简单。与多进程的业务逻辑相比，它没有内存溢出的风险。你可以创建一个简单的批处理脚本，并且在cron中运行，这个脚本会定时检查是否有任务需要处理，处理完之后就会自动退出，因此你不用担心是否有进程卡壳，或者陷入死循环。</p>
<p style="text-indent: 2em;"><strong><span style="color: #3366ff;">10. 及时启用错误报告 &#8211; David Cummings</span></strong></p>
<p style="text-indent: 2em;">David Cummings有一个专门提供CMS软件服务的公司，并且获得过几次奖，他有非常丰富的PHP开发经验。</p>
<p style="text-indent: 2em;">David曾经写过《two PHP tips he wished he’d learned in the beginning》，其中一点就是：及时启用错误报告，这会节省大量的时间。</p>
<p style="text-indent: 2em;">我告诉人们，最重要的事情就是最大程度地开启PHP的错误报告，为什么？因为PHP可能会隐藏很多小问题：</p>
<p style="text-indent: 2em;">变量没有预定义</p>
<p style="text-indent: 2em;">在代码片段中引用了不可用的变量</p>
<p style="text-indent: 2em;">使用了未定义的常量</p>
<p style="text-indent: 2em;">这些因素看起来并不是什么大事，除非你在使用面向对象的方法编写一些类库。通常，关闭错误报告将可能使你付出更大的成本来维护你的代码。</p>
<p style="text-indent: 2em;">错误报告可以帮你轻易地找到代码的问题所在，如果错误报告的等级够高，细微的错误都能被立即发现，帮助你节省整体debug的时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/08/14/expert-to-study-php-10-advise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在PHP中创建更好的名称空间</title>
		<link>http://www.helloyi.cn/index.php/2009/08/13/php-namespace/</link>
		<comments>http://www.helloyi.cn/index.php/2009/08/13/php-namespace/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 02:25:39 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2837</guid>
		<description><![CDATA[PHP V5.3 支持为 PHP 类、常量和函数提供名称空间。使用名称空间避免命名冲突，并为 PHP 代码提供上下文。这些技巧为构建名称空间提供一些指导原则，从而充分利用名称空间带来的好处。在 PHP V5.3 中引入的名称空间是为 PHP 类、常量和函数提供上下文的一种方式，从而可以将使用相同名称的元素看作是惟一的。惟一的名称避免了命名冲突，当两个类或函数使用相同的名称时就会发生这种情况。 有时这些 PHP 类表示现实世界中的相同对象，但它们的行为是完全不同的。名称空间能够确保您拥有正确的 PHP 类、常量或函数，并且要使用您的 PHP 类的人能够确保他们使用了正确的类。 代码中的名称空间就像现实世界中的上下文。考虑一个表示现实世界中的汽车对象的类。例如，通过 Internet 销售汽车的公司使用的 Automobile 类的行为可能与保险销售公司使用的 Automobile 类完全不同。 作为应用程序开发人员，您可能使用其他人编写的组件。您不能保证其他人永远不使用您已经使用的类名，但这些类的行为却大相径庭。在出现名称空间之前，PHP 开发人员通常将上下文构建到类名中，例如 My_Enterprise_Person 或 XML_Validator 。 清单 1 显示了一个位于名称空间中的类。 &#60;?php namespace IBM; class Foo { ... } ?&#62;   下面给出了一个例子，展示了如何在名称空间中引用类。 &#60;?php $foo = new \IBM\Foo(); ?&#62;   在向所有类添加名称空间之前定义一个名称空间策略是个不错的主意。尽管在某种程度上也可以不断地构建名称空间，但最好为名称空间确定一个通用结构，以方便名称空间的组织，并减少以后可能需要的修改。只要正确使用，除了提供上下文之外，名称空间还可以用来组织 PHP [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2838 alignleft" title="php" src="http://www.helloyi.cn/wp-content/uploads/2009/08/php1.jpg" alt="php" width="124" height="62" />PHP V5.3 支持为 PHP 类、常量和函数提供名称空间。使用名称空间避免命名冲突，并为 PHP 代码提供上下文。这些技巧为构建名称空间提供一些指导原则，从而充分利用名称空间带来的好处。在 PHP V5.3 中引入的名称空间是为 PHP 类、常量和函数提供上下文的一种方式，从而可以将使用相同名称的元素看作是惟一的。惟一的名称避免了命名冲突，当两个类或函数使用相同的名称时就会发生这种情况。</p>
<p><span id="more-2837"></span>有时这些 PHP 类表示现实世界中的相同对象，但它们的行为是完全不同的。名称空间能够确保您拥有正确的 PHP 类、常量或函数，并且要使用您的 PHP 类的人能够确保他们使用了正确的类。</p>
<p>代码中的名称空间就像现实世界中的上下文。考虑一个表示现实世界中的汽车对象的类。例如，通过 Internet 销售汽车的公司使用的</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Automobile</div></div>
<p>类的行为可能与保险销售公司使用的</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Automobile</div></div>
<p>类完全不同。</p>
<p>作为应用程序开发人员，您可能使用其他人编写的组件。您不能保证其他人永远不使用您已经使用的类名，但这些类的行为却大相径庭。在出现名称空间之前，PHP 开发人员通常将上下文构建到类名中，例如</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">My_Enterprise_Person</div></div>
<p>或</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">XML_Validator</div></div>
<p>。</p>
<p>清单 1 显示了一个位于名称空间中的类。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace IBM;
class Foo {
...
}
?&gt;</pre>
</tr>
</tbody>
</table>
<p> </p>
<p>下面给出了一个例子，展示了如何在名称空间中引用类。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
$foo = new \IBM\Foo();
?&gt;</pre>
</tr>
</tbody>
</table>
<p> </p>
<p>在向所有类添加名称空间之前定义一个名称空间策略是个不错的主意。尽管在某种程度上也可以不断地构建名称空间，但最好为名称空间确定一个通用结构，以方便名称空间的组织，并减少以后可能需要的修改。只要正确使用，除了提供上下文之外，名称空间还可以用来组织 PHP 代码。</p>
<p>其他语言（比如 Java™ 和 C#）在很久以前就使用名称空间。在选择名称空间命名方式上，我使用的约定类似于这些语言的约定，因为许多开发人员都对此比较熟悉，便于他们理解。不过，与 Java 语言不同的是，PHP 中的名称空间与类所在的目录之间没有联系。您可以给类、函数或常量选择任意的名称空间。您甚至可以对一个文件使用多个名称空间。同时，PHP 名称空间也不同于 C#，您可以对类以外的函数或常量使用名称空间。</p>
<p> </p>
<p>如果您为某个组织构建名称空间，您可以使用组织名作为顶级域。一般情况下，使用组织名称创建顶级名称空间已经足以为 PHP 代码提供上下文，以及避免命名冲突，除非该组织编写大量用途不一的应用程序。</p>
<p>清单 3 的示例显示了如何声明顶级名称空间。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace IBM;
...
?&gt;</pre>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<tbody></tbody>
<td> </td>
<p>   <em>次级名称空间</em> 是顶级名称空间内部的名称空间。当顶级名称空间还不足以为 PHP 类建立上下文时，它们提供进一步说明。</p>
<p>在创建次级名称空间时，不要凭一时的兴趣而过多地创建，这很重要。随着次级名称空间的增多，组织和引用它们就会变得越来越困难。如果您希望名称空间发挥双重作用，即避免命名冲突和组织 PHP 代码，那么就要更加注意这点了。</p>
<p>在决定为了方便组织代码应该向另一个名称空间引入多少个次级名称空间时，我尝试将该数量限制为 7 个（上下浮动不超过 2），以利用数字 7 更加容易记住这个优势。这并不总是奏效的，但我将它作为一个指导原则，以确保不将名称空间划分为过多的次级名称空间。</p>
<p>清单 4 的示例显示了在顶级名称空间中声明次级名称空间。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace IBM\DeveloperWorks;
...
?&gt;</pre>
</tr>
</tbody>
</table>
<p> 反斜杠（</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">\</div></div>
<p>）将次级名称空间 “developerWorks” 与顶级名称空间 “IBM” 分开。</p>
<p>在声明次级名称空间时，您可以使用两个常见技巧，或同时使用它们。获取名称空间的常见地方是项目名或应用程序名；另一个地方是域名。</p>
<p><span>通过项目定义</span></p>
<p>如果您使用组织名作为顶级名称空间，并且想通过次级名称空间来进一步提供上下文，那么可以使用项目名或应用程序名作为次级名称空间。例如，如果您构建一个称为 <em>Greeter</em> 的新应用程序（用于获取用户的名称并问候他们），那么清单 5 中的名称空间将为称为</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Prompt</div></div>
<p>的类提供完整的上下文。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace IBM\Greeter;
class Prompt {
...
}
?&gt;</pre>
</tr>
</tbody>
</table>
<p> </p>
<p>由于</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Prompt</div></div>
<p>可能是多个应用程序或库的类名，所以为该名称空间添加组织名和项目名能够让这个</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Prompt</div></div>
<p>类与其他同名的类区分开来。</p>
<p><span>通过域定义</span></p>
<p>使用域名是另一种选择次级名称空间的常见方式，如 <a href="http://www.helloyi.cn/wp-admin/#list6">清单 6</a> 所示。它也可以用于项目名之后，是否使用取决于您对可重用性的计划（见 “<a href="http://www.helloyi.cn/wp-admin/#reusability">根据可重用性命名</a>”）。</p>
<p><em>域</em> 是对更大的问题域的一组分类。域的一个例子是在更大型的应用程序中处理帐户、客户和产品的 “Account”、“Customers” 或 “Products”。<br />
<strong>清单 6. 使用域作为次级名称空间</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace IBM\MyApp\Account;
class Address {
...
}
?&gt;</pre>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<tbody></tbody>
<td> </td>
<p>  <span>根据可重用性命名</span></p>
<p>除了应用支持可重用性的模块概念之外，类和名称空间的命名方式也能够实现可重用性。有时不良的命名方式会损害可重用性，因为不佳的名称暗示着类仅能用于特定目的。同样，错误地应用名称空间可能会不必要地局限类的使用范围，让它们的重用变得困难。</p>
<p>在使用组织名的顶级名称空间中，应该保留 “Common”、“Core”、“Lib” 等可跨应用程序重用的名称空间。一个常见的例子是验证，其中针对整个企业的库存单位（SKU）、帐号或发票号的规则是一样的，从而获得合适的规则和长度。对于 Validator 类，类似清单 7 的名称空间是不错的选择。<br />
<strong>清单 7. 使用通用的 validation 名称空间</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace MyCompany\Common\Validation;
class NotNullValidator {
...
}
?&gt;</pre>
</tr>
</tbody>
</table>
<p> </p>
<p>在这里，组织名用作顶级域（“MyCompany”）。“Common” 名称空间用作项目。即使在编写这个类的同时也许正在编写一个特定的应用程序，该类一样可以在组织的任何项目中使用。最后，“Validation” 用作类的域。  </p>
<p><span>使用别名</span></p>
<p>尽管名称空间能够帮助您组织类并避免命名约定，但其缺点是名称过长。幸运的是，PHP 支持使用别名，因此可以在代码中使用更短的别名。清单 8 提供了一个示例。<br />
<strong>清单 8. 使用别名</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
use MyCompany\Common\Validation as Validators;
?&gt;</pre>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<tbody></tbody>
<td> </td>
<p>  </p>
<p> 名称空间命名使用单词首字母大写或 PASCAL 命名约定，这与其他 PHP 约定一样，比如 PHP Extension 和 Application Repository (PEAR) 包命名和文件名。例如，清单 9 中的名称空间比 <a href="http://www.helloyi.cn/wp-admin/#list10">清单 10</a> 中的名称空间要好。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace MyNamespace;
?&gt;</pre>
</tr>
</tbody>
</table>
<p> </p>
<p>避免使用与其他 PHP 约定冲突的命名和大小写约定。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<pre>&lt;?php
namespace mynamespace;
...
?&gt;</pre>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<p>PHP 中的名称空间能够用于组织代码、避免命名冲突以及为类、函数和常量提供上下文。在名称空间中使用模式或约定让代码更易于理解，并且更易于引用和使用。来自: IMB<a href="http://www.ibm.com/developerworks/cn/">developerWorks 中国</a><span> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/08/13/php-namespace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TortoiseSVN版本控制使用帮助和下载</title>
		<link>http://www.helloyi.cn/index.php/2009/08/06/tortoisesvn-help/</link>
		<comments>http://www.helloyi.cn/index.php/2009/08/06/tortoisesvn-help/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 05:16:09 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[文档工具]]></category>
		<category><![CDATA[酷软推荐]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2732</guid>
		<description><![CDATA[随着应用软件的开发规模及复杂程度日趋大型化，使得软件开发模式从早期的个人作坊式渐渐转变为团队协作开发方式，在这种团队协作的开发模式，为了管理好开发项目，就离不开版本控制软件，在开发过程中采用版本控制软件，能够完整地保存开发中对应用程序每一个源文件所有的修改记录，充分地利用版本控制软件能够对软件开发进行卓有成效的管理。 常见的版本控制软件有VSS、CVS和SVN 　　VSS（Visual Source Safe）为微软的产品，较为易学易用，使用微软的产品进行开发通常都用这个，但是VSS只能在windows平台上运行，并且不是免费软件，安全性也不高，因此应用并不太广泛。 　　CVS（Concurrent Version System）是免费开源的配置管理工具，其源代码和安装文件都可以免费下载。由于其简单易用、功能强大，跨平台，支持并发版本控制，而且免费，它在全球中小型软件企业中得到了广泛使用。不过CVS的部署比VSS要复杂一些。 　　SVN（Subversion）作为CVS的重写版和改进版，其目标就是作为一个更好的版本控制软件，取代CVS.总的来说，CVS在发展的过程中逐渐失去优势，已经不再适合现代开发，目前，绝大多数CVS服务已经改用SVN. 　　目前流行的Google Code开源项目托管平台就是使用SVN进行版本控制。 　　Windows下的SVN客户端 　　TortoiseSVN是Windows下的SVN（Subversion）版本控制系统的一个免费开源客户端，可以超越时间的管理文件和目录。文件保存在中央版本库，除了能记住文件和目录的每次修改以外，版本库非常像普通的文件服务器。用户可以将文件恢复到过去的版本，并且可以通过检查历史知道数据做了哪些修改，谁做的修改。 　　下载TortoiseSVN 　　TortoiseSVN的官方下载地址是 http://tortoisesvn.net/downloads ，普通Windows用户下载32位软件即可，下载地址后面还有中文语言包（Language packs）提供，安装完后可以将TortoiseSVN的界面编程简体中文。 　　TortoiseSVN使用简介 　　安装完成TortoiseSVN后，会发现文件夹图标被重载，不同的重载图标所表示不同的意义。所有的TortoiseSVN命令都是通过windows资源管理器的右键菜单执行。右键点击一个文件或者文件夹，大多数菜单项都能够直接显示。比较常用的功能是“更新”和“提交”。通过“更新”可以从SVN服务器上下载最新的代码，“提交”则可以将本地修改的代码上传到SVN服务器上。 　　更为详细的TortoiseSVN使用帮助，请参考TortoiseSVN中文手册。 　　Google Code上使用SVN 　　在Google Code上使用SVN提交的时候，会要求输入密码，这个密码并非你的Gmail密码，而是Google Code密码，在Profile-Settings中可以看到你的Google Code密码，我第一次使用Google Code的时候就误以为是Gmail密码，结果重复输入了N次密码都没提交成功。 转载自月光博客 [ http://www.williamlong.info/ ]]]></description>
			<content:encoded><![CDATA[<p>随着应用软件的开发规模及复杂程度日趋大型化，使得软件开发模式从早期的个人作坊式渐渐转变为团队协作开发方式，在这种团队协作的开发模式，为了管理好开发项目，就离不开版本控制软件，在开发过程中采用版本控制软件，能够完整地保存开发中对应用程序每一个源文件所有的修改记录，充分地利用版本控制软件能够对软件开发进行卓有成效的管理。</p>
<p><span id="more-2732"></span><strong>常见的版本控制软件有VSS、CVS和SVN</strong></p>
<p>　　VSS（Visual Source Safe）为微软的产品，较为易学易用，使用微软的产品进行开发通常都用这个，但是VSS只能在windows平台上运行，并且不是免费软件，安全性也不高，因此应用并不太广泛。</p>
<p>　　CVS（Concurrent Version System）是免费开源的配置管理工具，其源代码和安装文件都可以免费下载。由于其简单易用、功能强大，跨平台，支持并发版本控制，而且免费，它在全球中小型软件企业中得到了广泛使用。不过CVS的部署比VSS要复杂一些。</p>
<p>　　SVN（Subversion）作为CVS的重写版和改进版，其目标就是作为一个更好的版本控制软件，取代CVS.总的来说，CVS在发展的过程中逐渐失去优势，已经不再适合现代开发，目前，绝大多数CVS服务已经改用SVN.</p>
<p>　　目前流行的Google Code开源项目托管平台就是使用SVN进行版本控制。</p>
<p>　　<strong>Windows下的SVN客户端</strong></p>
<p>　　TortoiseSVN是Windows下的SVN（Subversion）版本控制系统的一个免费开源客户端，可以超越时间的管理文件和目录。文件保存在中央版本库，除了能记住文件和目录的每次修改以外，版本库非常像普通的文件服务器。用户可以将文件恢复到过去的版本，并且可以通过检查历史知道数据做了哪些修改，谁做的修改。</p>
<p>　　<strong>下载TortoiseSVN</strong></p>
<p>　　TortoiseSVN的官方下载地址是 <a href="http://tortoisesvn.net/downloads" target="_blank"><span style="color: #670e1a;">http://tortoisesvn.net/downloads</span></a> ，普通Windows用户下载32位软件即可，下载地址后面还有中文语言包（Language packs）提供，安装完后可以将TortoiseSVN的界面编程简体中文。</p>
<p>　　<strong>TortoiseSVN使用简介</strong></p>
<p>　　安装完成TortoiseSVN后，会发现文件夹图标被重载，不同的重载图标所表示不同的意义。所有的TortoiseSVN命令都是通过windows资源管理器的右键菜单执行。右键点击一个文件或者文件夹，大多数菜单项都能够直接显示。比较常用的功能是“更新”和“提交”。通过“更新”可以从SVN服务器上下载最新的代码，“提交”则可以将本地修改的代码上传到SVN服务器上。</p>
<p>　　更为详细的TortoiseSVN使用帮助，请参考<a href="http://svndoc.iusesvn.com/tsvn/" target="_blank"><span style="color: #670e1a;">TortoiseSVN中文手册</span></a>。</p>
<p>　　<strong>Google Code上使用SVN</strong></p>
<p>　　在Google Code上使用SVN提交的时候，会要求输入密码，这个密码并非你的Gmail密码，而是Google Code密码，在Profile-Settings中可以看到你的Google Code密码，我第一次使用Google Code的时候就误以为是Gmail密码，结果重复输入了N次密码都没提交成功。</p>
<p>转载自<a href="http://www.williamlong.info/"><span style="color: #670e1a;">月光博客</span></a> [ <a href="http://www.williamlong.info/"><span style="color: #670e1a;">http://www.williamlong.info/</span></a> ]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/08/06/tortoisesvn-help/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP项目开发全程实录教程下载</title>
		<link>http://www.helloyi.cn/index.php/2009/08/03/php-shilu-jiaochen/</link>
		<comments>http://www.helloyi.cn/index.php/2009/08/03/php-shilu-jiaochen/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 17:17:40 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[教程]]></category>
		<category><![CDATA[数据库应用]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2720</guid>
		<description><![CDATA[《PHP项目开发全程实录》(DVD17小时语音视频讲解)以九九度供求信息网、BCTY365网上社区、办公自动化管理系统、电子商务平台网、网络在线考试系统、物流配送信息网、学校图书馆管理系统、博客管理系统、企业快信系统、online影视365等10个实际项目开发程序为案例，从软件工程的角度出发，按照项目的开发顺序，系统、全面地介绍了程序开发流程。从开发背景、需求分析、系统功能分析、数据库分析、数据库设计、网站开发到网站发布，每一过程都详细地进行了介绍。.《PHP项目开发全程实录》(DVD17小时语音视频讲解)附有配套光盘，光盘中提供有10多个小时的教学视频录像、编程词典的体验版学习软件，还提供了书中所有案例的全部源代码，所有源代码都经过精心调试，在Windows NT、Windows Server 2003、Linux、Unix操作系统下全部通过，保证能够正常运行。《PHP项目开发全程实录》(DVD17小时语音视频讲解)案例涉及行业广泛，实用性非常强，通过《PHP项目开发全程实录》(DVD17小时语音视频讲解)的学习，读者可以了解各个行业的特点，能够针对某一行业进行网站开发，也可以通过光盘中提供的案例源代码和数据库进行二次开发，以减少开发系统所需要的时间。 点击下载]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.helloyi.cn/index.php/2009/08/03/php-shilu-jiaochen"><img class="size-full wp-image-2721 alignleft" title="php1" src="http://www.helloyi.cn/wp-content/uploads/2009/08/php.jpg" alt="" width="179" height="242" /></a>《PHP项目开发全程实录》(DVD17小时语音视频讲解)以九九度供求信息网、BCTY365网上社区、办公自动化管理系统、电子商务平台网、网络在线考试系统、物流配送信息网、学校图书馆管理系统、博客管理系统、企业快信系统、online影视365等10个实际项目开发程序为案例，从软件工程的角度出发，按照项目的开发顺序，系统、全面地介绍了程序开发流程。从开发背景、需求分析、系统功能分析、数据库分析、数据库设计、网站开发到网站发布，每一过程都详细地进行了介绍。.《PHP项目开发全程实录》(DVD17小时语音视频讲解)附有配套光盘，光盘中提供有10多个小时的教学视频录像、编程词典的体验版学习软件，还提供了书中所有案例的全部源代码，所有源代码都经过精心调试，在Windows NT、Windows Server 2003、Linux、Unix操作系统下全部通过，保证能够正常运行。《PHP项目开发全程实录》(DVD17小时语音视频讲解)案例涉及行业广泛，实用性非常强，通过《PHP项目开发全程实录》(DVD17小时语音视频讲解)的学习，读者可以了解各个行业的特点，能够针对某一行业进行网站开发，也可以通过光盘中提供的案例源代码和数据库进行二次开发，以减少开发系统所需要的时间。</p>
<p><span id="more-2720"></span><a href="http://www.k167.com/topic/285797.html">点击下载</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/08/03/php-shilu-jiaochen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP6的变化及其对脚本的影响</title>
		<link>http://www.helloyi.cn/index.php/2009/07/06/php6/</link>
		<comments>http://www.helloyi.cn/index.php/2009/07/06/php6/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 04:47:08 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[教程]]></category>
		<category><![CDATA[数据库应用]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=2671</guid>
		<description><![CDATA[PHP V6 的初步副本已经发布，所以您可以下载它并试用本文列出的许多特性和更改。对于当前副本已经实现的特性. PHP V6 的最大改进是在许多核心函数中支持 Unicode 字符串。这个新特性有巨大的影响，因为它允许 PHP 支持更广泛的字符集，从而获得更多的国际支持。所以，如果您是一位使用不同语言（比如 Java™ 编程语言，这些语言的国际化（il8n）支持比 PHP 好）的开发人员或架构师，那么您应该看看国际化支持改进后的 PHP. 现在，已经可以下载和使用针对开发人员的 PHP V6，所以您可以看到其中的一些特性已经支持 Unicode 字符串。要获取已经经过测试和验证的可以处理 Unicode 的函数，参见 参考资料。 什么是 Unicode？ Unicode 是一组字符、字符编码和编码方法行业标准，其主要目标是支持 i18n 和本地化 (i10n)。Unicode Transformation Format (UTF) 为 Unicode 指定一种编码字符的方式。关于 Unicode 和 UTF 的更多信息，见 参考资料 部分。 名称空间 名称空间 是一种避免函数名和类名出现冲突的方法，并且不会在命名约定中使用前缀，从而增强了函数名和类名的可读性。因此通过使用名称空间，您可以使用可能已被他人使用的类名，但不用担心出现问题。清单 1 提供一个 PHP 的名称空间例子。 您不需要对代码进行任何更新或修改，因为不包含名称空间的 PHP 代码将能够正常运行。因为名称空间特性向后支持至 PHP V5.3，因此当该特性可用时，您可以在 PHP [...]]]></description>
			<content:encoded><![CDATA[<p>PHP V6 的初步副本已经发布，所以您可以下载它并试用本文列出的许多特性和更改。对于当前副本已经实现的特性. PHP V6 的最大改进是在许多核心函数中支持 Unicode 字符串。这个新特性有巨大的影响，因为它允许 PHP 支持更广泛的字符集，从而获得更多的国际支持。所以，如果您是一位使用不同语言（比如 Java™ 编程语言，这些语言的国际化（il8n）支持比 PHP 好）的开发人员或架构师，那么您应该看看国际化支持改进后的 PHP.</p>
<p><span id="more-2671"></span>现在，已经可以下载和使用针对开发人员的 PHP V6，所以您可以看到其中的一些特性已经支持 Unicode 字符串。要获取已经经过测试和验证的可以处理 Unicode 的函数，参见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#resources">参考资料</a>。</p>
<table border="0" cellspacing="0" cellpadding="0" width="40%" align="right">
<tbody>
<tr>
<td width="10"><img src="http://www.ibm.com/i/c.gif" alt="" width="10" height="1" /></td>
<td>
<table border="1" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td bgcolor="#eeeeee"><a name="N1007F"><strong>什么是 Unicode？</strong></a><br />
Unicode 是一组字符、字符编码和编码方法行业标准，其主要目标是支持 i18n 和本地化 (i10n)。Unicode Transformation Format (UTF) 为 Unicode 指定一种编码字符的方式。关于 Unicode 和 UTF 的更多信息，见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#resources">参考资料</a> 部分。</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><a name="N10089"><span class="smalltitle">名称空间</span></a></p>
<p><em>名称空间</em> 是一种避免函数名和类名出现冲突的方法，并且不会在命名约定中使用前缀，从而增强了函数名和类名的可读性。因此通过使用名称空间，您可以使用可能已被他人使用的类名，但不用担心出现问题。清单 1 提供一个 PHP 的名称空间例子。</p>
<p>您不需要对代码进行任何更新或修改，因为不包含名称空间的 PHP 代码将能够正常运行。因为名称空间特性向后支持至 PHP V5.3，因此当该特性可用时，您可以在 PHP 应用程序中引入名称空间。<br />
<a name="list1"><strong>清单 1. 名称空间的例子</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
// I'm not sure why I would implement my own XMLWriter, but at least
// the name of this one won't collide with the one built in to PHP
namespace NathanAGood;
class XMLWriter
{
    // Implementation here...
}

$writer = new NathanAGood::XMLWriter();

?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><a name="N100A3"><span class="atitle">Web 2.0 特性</span></a></p>
<p>取决于您使用 PHP 的方式以及当前的代码，PHP V6 中的语言和语法差别对您的影响可能没有接下来的特性大，这些特性允许您将 Web 2.0 特性直接引入到 PHP 应用程序中。</p>
<p><a name="N100AD"><span class="smalltitle">SOAP</span></a></p>
<p>SOAP 是 Web 服务采用的协议之一，并且在许多其他语言中都得到支持，比如 Java 编程语言和 Microsoft® .NET。尽管有许多其他方式可以使用和公开 Web 服务（比如 Representational State Transfer，REST），SOAP 仍然是实现不同平台之间的交互性的常用方法。除了 PHP Extension and Application Repository (PEAR) 库中的 SOAP 模块之外，PHP V5 还引入了一个 SOAP 扩展。默认情况下这个扩展是禁用的，所以您或您的 ISP 必须启用它。此外，您可以通过 PEAR 包构建 SOAP 客户端和服务器，比如 SOAP 包。</p>
<p>除非您更改了默认设置，否则 SOAP 扩展在 PHP V6 中是启用的。这些扩展为实现 SOAP 客户端和 SOAP 服务器提供一种简易的方法，从而使您能够构建使用和提供 Web 服务的 PHP 应用程序。</p>
<p>如果默认启用了 SOAP 扩展，您就不需要在 PHP 中配置它们。如果您开发了 PHP 应用程序并发布给 ISP，那么您必须和 ISP 进行核实，确保他们在升级时为您启用 SOAP 扩展。</p>
<p><a name="N100BF"><span class="smalltitle">XML</span></a></p>
<p>从 PHP V5.1 开始，XMLReader 和 XMLWriter 就成为了 PHP 核心的一部分，这使您能够在 PHP 应用程序中更加轻松地处理 XML。与 SOAP 扩展一样，如果您使用 SOAP 或 XML 的话，这个特性是个好消息，因为 PHP V6 比 V4 更适合您。</p>
<p>XMLWriter 和 XMLReader 是基于流的面向对象类，它们允许您读写 XML，并且不要担心 XML 的细节。</p>
<p> </p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<table class="no-print" border="0" cellspacing="0" cellpadding="0" align="right">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" alt="" width="16" height="16" /></td>
<td align="right" valign="top"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#main"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><a name="N100CB"><span class="atitle">删除的特性</span></a></p>
<p>PHP V6 在添加一些新特性的同时，也删除了以前版本中的一些函数和特性。被删除的大部分东西，比如</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>和</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">safe_mode</div></div>
<p>，在当前的 PHP 中都被广泛认为是 “有漏洞的”，因为它们可能招致安全风险。为了保持 PHP 的简洁性，将删除下面小节列出的函数和特性。在 ISP 或企业升级到 PHP V6 之后，反对删除这些内容的人很可能会给现有的脚本带来安全问题，而支持删除的人将会很幸运，因为 PHP 团队为他们修复了一些漏洞，并且提供更加干净、安全的实现。</p>
<p>从 PHP V6 删除的特性包括：</p>
<ul>
<li>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
</li>
<li>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
</li>
<li>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_long_arrays</div></div>
</li>
<li>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">safe_mode</div></div>
</li>
</ul>
<p><a name="N100FF"><span class="smalltitle"></p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p></span></a></p>
<p>由于</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p>导致可移植性、性能和易用性方面的问题，所以 PHP 文档不鼓励使用它。鉴于这个原因，PHP V6 干脆删除了该特性。因此，在升级到 PHP V6 之前，要确保您的代码没有使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p>。如果您正在使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p>为数据库调用转换字符串类型，请使用数据库实现的参数化查询（如果支持的话）。如果不支持参数化查询，请使用数据库实现的类型转换函数，比如针对 MySQL 的</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql_escape_string</div></div>
<p>或针对 PostgreSQL 的</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">pg_escape_string</div></div>
<p>。清单 2 显示了一个使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p>的例子。<br />
<a name="list2"><strong>清单 2. 使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p>（不推荐）</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
// Assuming magic_quotes is on...
$sql = "INSERT INTO USERS (USERNAME) VALUES $_GET['username']";
?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>在针对新版本 PHP 进行处理之后，您的 PHP 代码应该类似于清单 3。<br />
<a name="list3"><strong>清单 3. 使用参数化查询（推荐）</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
// Using the proper parameterized query method for MySQL, as an example
$statement = $dbh-&gt;prepare("INSERT INTO USERS (USERNAME) VALUES ?");
$statement-&gt;execute(array($_GET['username']));
?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>既然即将完全删除对</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">magic_quotes</div></div>
<p>的支持，</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">get_magic_quotes_gpc()</div></div>
<p>函数就不再可用。这可能会影响一些老版本的 PHP 脚本，因此在更新之前，确保对所有存在这些函数的地方进行修复。</p>
<p><a name="N1014A"><span class="smalltitle"></p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p></span></a></p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>配置键在 PHP V4.2 中已经默认关闭，当时也引起了争议。当</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>打开之后，就能轻松地使用可能注入了来自 HTML 表单的值的变量。因为在脚本中并不真正需要初始化这些变量，所以很容易编写出带有安全漏洞的脚本。</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>文档（见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#resources">参考资料</a>）提供关于</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>的更多信息。清单 4 是一个使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>的例子。<br />
<a name="list4"><strong>清单 4. 使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_globals</div></div>
<p>（不推荐）</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
// A security hole, because if register_globals is on, the value for user_authorized
// can be set by a user sending them on the query string
// (i.e., http://www.example.com/myscript.php?user_authorized=true)
if ($user_authorized) {
    // Show them everyone's sensitive data...
}
?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>如果您的 PHP 代码使用了全局变量，那么应该更新它。即便不是为了使用新版本的 PHP 而更新它，从安全角度考虑，您也应该进行更新。更新完成之后，您的代码应该类似于清单 5。<br />
<a name="list5"><strong>清单 5. 更加明确的代码（推荐）</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
function is_authorized() {
    if (isset($_SESSION['user'])) {
        return true;
    } else {
        return false;
    }
}

$user_authorized = is_authorized();
?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><a name="N10189"><span class="smalltitle">register_long_arrays</span></a></p>
<p>当打开</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_long_arrays</div></div>
<p>设置时，它将注册</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$HTTP_*_VARS</div></div>
<p>预定义变量。如果您目前使用更长的变量，那么需要进行更新，以适应更短的变量。这个设置是在 PHP V5 中引入的（考虑到向后兼容性），但出于性能考虑，PHP 团队建议关闭它。清单 6 是一个使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_long-arrays</div></div>
<p>的例子。<br />
<a name="list6"><strong>清单 6. 使用注册数组（不推荐）</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
    // Echo's the name of the user value given on the query string, like
    // http://www.example.com/myscript.php?username=ngood
    echo "Welcome, $HTTP_GET_VARS['username']!";
?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>如果您的 PHP 代码类似于清单 6，那么更新它，如清单 7 所示。如果</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_long_arrays</div></div>
<p>设置是打开的，那么关闭它，然后再次测试脚本。<br />
<a name="list7"><strong>清单 7. 使用</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$_GET</div></div>
<p>（推荐）</strong></a></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">
&lt;?php
    // Using the supported $_GET array instead.
    echo "Welcome, $_GET['username']!";
?&gt;</pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><a name="N101BD"><span class="smalltitle"></p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">safe_mode</div></div>
<p></span></a></p>
<p>当打开了</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">safe_mode</div></div>
<p>配置键时，它确保所操作的文件的所有者与所执行的脚本的所有者匹配。这最初作为在共享服务器环境中进行操作时（许多 ISP 都这样做）处理安全性的一种方法。（要获得受</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">safe_mode</div></div>
<p>更改影响的函数列表的链接，请参见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#resources">参考资料</a>）。您的 PHP 代码不会受这一更改的影响，但是有必要了解它，免得在未来设置 PHP 时使用它或在脚本中依赖它。</p>
<p><a name="N101D6"><span class="smalltitle">PHP 标记</span></a></p>
<p>Microsoft Active Server Pages (ASP) 样式的标记（PHP 标记的缩短版）不再受支持。要确保您的脚步不存在这种问题，请检查是否在 PHP 文件中使用了</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;lt;%</div></div>
<p>或</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">%&amp;gt;</div></div>
<p>标记。如果使用了，那么分别将其替换为</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&amp;lt;?php</div></div>
<p>和</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">?&amp;gt;</div></div>
<p>。</p>
<p><a name="N101F0"><span class="smalltitle">FreeType 1 和 GD 1</span></a></p>
<p>PHP 团队删除了对 FreeType 1 和 GD 1 的支持，其理由是这两个库缺乏持续开发，并且已经不适应时代要求。不过，这两个库的更新版本将提供更好的功能。要更多地了解 FreeType 和 GD，参见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#resources">参考资料</a>。</p>
<p><a name="N101FE"><span class="smalltitle"></p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg</div></div>
<p></span></a></p>
<p>将从核心 PHP 支持中删除支持 Portable Operating System Interface (POSIX) 正则表达式的</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg</div></div>
<p>扩展。如果您正在使用 POSIX 正则表达式函数之一，这一更改将带来影响，除非您包含</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg</div></div>
<p>功能。如果您正在使用 POSIX 正则表达式，可以考虑更新正则表达式函数，以使用 Perl-Compatible Regular Expression (PCRE) 函数，因为它们提供更多的特性和更好的平台。表 1 列出了删除</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg</div></div>
<p>之后将不可用的 POSIX 正则表达式函数。同时展示了它们的 PCRE 代替函数。<br />
<a name="table1"><strong>表 1.</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg()</div></div>
<p>函数及其 PCRE 等效函数</strong></a></p>
<table class="data-table-1" border="0" cellspacing="0" cellpadding="0" summary="Listing of functions that will not be available without ereg">
<tbody>
<tr>
<th scope="col">ereg() 函数</th>
<th scope="col">类似的 preg() 函数</th>
</tr>
<tr>
<td>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg()</div></div>
<p>,</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">eregi()</div></div>
</td>
<td>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">preg_match()</div></div>
</td>
</tr>
<tr>
<td>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg_replace()</div></div>
<p>,</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ereg_replacei()</div></div>
</td>
<td>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">preg_replace()</div></div>
</td>
</tr>
</tbody>
</table>
<p> </p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<table class="no-print" border="0" cellspacing="0" cellpadding="0" align="right">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" alt="" width="16" height="16" /></td>
<td align="right" valign="top"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#main"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><a name="N1025F"><span class="atitle">PHP V5.3</span></a></p>
<p>这里提到的一些特性还将迁移到 PHP V5.3，5.3 版本是在 2008 年的第一季度发布的。您可能希望升级到 V5.3 并开始使用这些特性，但是直接迁移到 PHP V6 能够节省该步骤。下面列出向后支持 v5.3 的特性：</p>
<ul>
<li>名称空间</li>
<li>默认情况下在核心函数中包含 XMLReader 和 XMLWriter</li>
</ul>
<p> </p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<table class="no-print" border="0" cellspacing="0" cellpadding="0" align="right">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" alt="" width="16" height="16" /></td>
<td align="right" valign="top"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#main"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>PHP V6 将提供许多改进，并且删除老版本 PHP 中的一些特性。为了利用最新的特性和了解删除的特性，请仔细阅读 NEWS 列表（见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#resources">参考资料</a>），它包含 PHP V6 添加或删除的特性的最新信息。现在，您可以下载开发人员版本的 PHP V6，并确保您的应用程序不受这些变更的影响。您还可以利用这次机会清理自己的脚本，删除本文不推荐使用的函数，或更新您的语法以确保应用程序受支持。 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-future/#N100A3">来源http://www.ibm.com/developerworks/cn/opensource/os-php-future/#N100A3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2009/07/06/php6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

