﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-China-PHPer</title><link>http://www.phpweblog.net/yemoo/</link><description>PHP技术钻研修炼中...</description><language>zh-cn</language><lastBuildDate>Sun, 05 Jul 2009 09:30:48 GMT</lastBuildDate><pubDate>Sun, 05 Jul 2009 09:30:48 GMT</pubDate><ttl>60</ttl><item><title>Zend Studio 5.5中文破解版下载</title><link>http://www.phpweblog.net/yemoo/archive/2008/10/20/5961.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Mon, 20 Oct 2008 08:13:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2008/10/20/5961.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/5961.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2008/10/20/5961.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/5961.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/5961.html</trackback:ping><description><![CDATA[<p><font color=#ff0000 size=4><strong>Zend Studio 5.5 的下载地址：</strong></font><a href="http://down.chinaz.com/soft/2635.htm"><font color=#ff0000 size=4><strong>http://down.chinaz.com/soft/2635.htm</strong></font></a></p>
<p><font color=#ff0000 size=4><strong>注册机：</strong></font><a href="http://www.cnblogs.com/Files/macleo/d-cf5ze2.zip"><font color=#ff0000 size=4><strong>http://www.cnblogs.com/Files/macleo/d-cf5ze2.zip</strong></font></a></p>
<p><font size=4>这个是带中文的，但是选项菜单里没有中文选项，只能手工改了：<br><br>把这个目录Documents and Settings\用户名\ZDE\config_5.5下的desktop_option.xml中的&lt;locale language="en" country="" variant=""/&gt;改成&lt;locale language="zh" country="" variant=""/&gt;，&lt;encoding name="default"/&gt;改成&lt;encoding name="UTF-8"/&gt;，注意要在关闭zend软件的情况下改，否则又会被改回来。</font></p>
<img src ="http://www.phpweblog.net/yemoo/aggbug/5961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2008-10-20 16:13 <a href="http://www.phpweblog.net/yemoo/archive/2008/10/20/5961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何将mysql5的sql文件导入到mysql4?</title><link>http://www.phpweblog.net/yemoo/archive/2008/10/15/5887.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Wed, 15 Oct 2008 09:18:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2008/10/15/5887.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/5887.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2008/10/15/5887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/5887.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/5887.html</trackback:ping><description><![CDATA[1、将mysql5里导出的sql文件导入到mysql5中。&nbsp;&nbsp;&nbsp;<br>2、用mysqldump &nbsp; -uroot &nbsp; -p1234 &nbsp; --opt &nbsp; --compatible=mysql40 &nbsp; -A &nbsp; -re:\localhost.sql &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; --compatible=name参数描述如下： &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; --compatible=name &nbsp; &nbsp; &nbsp; Change &nbsp; the &nbsp; dump &nbsp; to &nbsp; be &nbsp; compatible &nbsp; with &nbsp; a &nbsp; given &nbsp; mode. &nbsp; By &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; default &nbsp; tables &nbsp; are &nbsp; dumped &nbsp; in &nbsp; a &nbsp; format &nbsp; optimized &nbsp; for &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MySQL. &nbsp; Legal &nbsp; modes &nbsp; are: &nbsp; ansi, &nbsp; mysql323, &nbsp; mysql40, &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; postgresql, &nbsp; oracle, &nbsp; mssql, &nbsp; db2, &nbsp; maxdb, &nbsp; no_key_options, &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; no_table_options, &nbsp; no_field_options. &nbsp; One &nbsp; can &nbsp; use &nbsp; several &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modes &nbsp; separated &nbsp; by &nbsp; commas. &nbsp; Note: &nbsp; Requires &nbsp; MySQL &nbsp; server &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version &nbsp; 4.1.0 &nbsp; or &nbsp; higher. &nbsp; This &nbsp; option &nbsp; is &nbsp; ignored &nbsp; with &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; earlier &nbsp; server &nbsp; versions. &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 3、将e:\localhost.sql导入mysql4,如mysql命令行中 &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; source &nbsp; e:\localhost.sql&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; 
<img src ="http://www.phpweblog.net/yemoo/aggbug/5887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2008-10-15 17:18 <a href="http://www.phpweblog.net/yemoo/archive/2008/10/15/5887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决SQLyog中文乱码的问题</title><link>http://www.phpweblog.net/yemoo/archive/2008/10/15/5883.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Wed, 15 Oct 2008 00:29:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2008/10/15/5883.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/5883.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2008/10/15/5883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/5883.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/5883.html</trackback:ping><description><![CDATA[<p>1.在SQLyog下输入下面代码，全部执行</p>
<p>SET character_set_client = utf8;<br>SET character_set_results = gb2312;<br>SET character_set_connection = utf8;</p>
<p>如果上边的不行，还可以改成Gbk。总以根据你的数据的文字编码改成相应的编码类型就ok了。给出Gbk的代码：</p>
<p>SET character_set_client = gbK; <br>SET character_set_results = gbK; <br>SET character_set_connection = utf8; <br>&nbsp;</p>
<p>但是重启SQL之后又不行了。</p>
<p><br>2.Tools-&gt;Preference Base-&gt;Editor 修改Fonts<br>修改完成后,重新启动SQLyog就好了!</p>
<img src ="http://www.phpweblog.net/yemoo/aggbug/5883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2008-10-15 08:29 <a href="http://www.phpweblog.net/yemoo/archive/2008/10/15/5883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zend Framework V1.5 中的新特性【转自IBM developerworks】</title><link>http://www.phpweblog.net/yemoo/archive/2008/06/03/4351.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Tue, 03 Jun 2008 00:43:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2008/06/03/4351.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/4351.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2008/06/03/4351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/4351.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/4351.html</trackback:ping><description><![CDATA[<blockquote>
<p>本文转自IBM技术社区，原文链接：<a title=http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/?S_TACT=105AGX52&amp;S_CMP=tec-csdn href="http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/?S_TACT=105AGX52&amp;S_CMP=tec-csdn" target=_blank>http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/?S_TACT=105AGX52&amp;S_CMP=tec-csdn</a></p>
<p>流行的开源软件 Zend Framework 刚刚实现了一些出色的增强。本文介绍 V1.5 中的新特性以及如何升级对 GData Web 服务的增强支持，包括 <code>Zend_Form</code>、<code>Zend_Layout </code>和 <code>Zend_View</code>，并且，改进的 Ajax 支持可以帮助 PHP 开发人员轻松地构建先进的 Web 应用程序。</p>
</blockquote><!--start RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--end RESERVED FOR FUTURE USE INCLUDE FILES-->
<p>软件框架指一组代码库集合，旨在以一种标准化方式处理应用程序中的所有基本需求，以便使开发人员集中精力进行开发，而不是进行重复劳动。目前有多个开源的 PHP 开发框架可供选择，在所有这些框架中，Zend Framework 也许是最受欢迎的。</p>
<p>Zend 收到欢迎的原因是它非常重视最佳实践，这一特性对于那些重视可持续性的开发人员来说十分有吸引力。Zend 以一种高度模块化的方式构造框架：大多数 Zend Framework 组件可以完全分离并单独使用，这一点非常吸引只需要用到可用库的其中一部分的开发人员。Zend 的灵活性以及重视最佳实践而产生的良好标准化，使它成为具有广泛用途的实用框架。</p>
<p>已经很强大的 Zend Framework 在 V1.5 中又增加了几个全新的组件和组件增强。这些升级使开发复杂的 PHP 应用程序更加简单、更加可维护，这是因为对诸如表单验证例程甚至是前端布局创建等内容实现了标准化。让我们首先看一下<code>Zend_Form</code> 组件以及它提供的全部功能。</p>
<p><a name=N1006F><span class=atitle><code><strong>Zend_Form</strong></code> </span></a></p>
<p>Zend Framework 的一个令人兴奋的新增特性就是 <code>Zend_Form</code> 组件。Web 应用程序如果不能接收输入数据并对其进行处理，那么就会变得毫无意义，获得用户数据的最简单方式就是使用表单。当然，在开发与维护一个 Web 应用程序时，表单是最单调乏味的工作：您必须验证收到的全部内容，确保它是您需要的内容，并需要对每个到来的数据片段进行单独处理。所有上述操作都假设您不会生成错误消息并重复所有工作，当然，您肯定会遇到这些问题 — 如果不能重用代码，手工执行这些工作实在是非常让人畏惧的任务。</p>
<p>新的表单组件提供的功能不仅仅是允许您用编程的方法创建一个表单和表单元素。<code>Zend_Form</code> 能够完成复杂的验证并在表单验证失败时在表单中显示错误信息。</p>
<p><code>Zend_Form</code> 的使用方法简单明了。首先，将 <code>form</code> 对象实例化，然后设置它的动作和方法。最后，将表单元素添加到 <code>form</code> 对象中，并且对单个表单元素应用表单元素验证器和过滤器。在应用程序中呈现和使用完整的 <code>form</code> 对象，对结果进行验证和过滤。查看清单 1 中的简单表单示例。<br><br><a name=N100A0><strong>清单 1. 一个简单的表单</strong></a><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">require_once</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Zend/Form.php</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$form</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Zend_Form(</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">post</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">elements</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">text</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">required</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">label</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">validators</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">alpha</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">age</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">text</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">required</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">label</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Age</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">validators</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">digits</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">submit</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">submit</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">label</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Send</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;));&nbsp;<br></span></div>
<br>
<p>清单 1 的结果如图 1 所示。</p>
<br><a name=N100AB><strong>图 1. 表单</strong></a><br><img height=209 alt="The form" src="http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/fig01.jpg" width=226>&nbsp;<br>
<p><code>Zend_Form</code> 附带了下列元素：按钮、复选框、隐藏（hiden）、图片、多选框，多重选择、密码、单选、重置、选择、提交、文本、文本区。<code>Zend_Form</code> 不仅仅限制于附带的元素：内置的 <code>Zend_Form_Element</code> 类允许您创建自己的元素。</p>
<p>您可以手动对表单元素进行实例化并把它们连接到表单，或者让表单对象创建并实例化一个新表单元素，使它符合您要求的类型。在将单个元素附加到 <code>form</code> 对象之前或之后，每个元素都可根据需要进行单独配置，并且在呈现完成的表单之前，可以随时将单独的验证器和过滤器集合附加到它们的表单元素中。</p>
<p>可以对您的表单元素使用 19 种标准验证类型。这些验证器可以检查您通常需要采集的所有数据类型 — 从简单的数据类型检验到正则表达式是否匹配电子邮件地址的验证（可配置为确保存在顶级域并有一个 MX 记录）。默认情况下，如果一个验证器返回 false，则剩余的验证检查都将取消，但这个参数也可以对单个验证器进行配置。</p>
<p>在清单 1 中，一个 alpha 验证器应用到名字字段中，数字验证器应用到年龄字段中。当您输入的数据未通过这些验证测试时，图 2 中显示了默认情况下发生的情况。</p>
<br><a name=N100D9><strong>图 2 未通过验证测试的表单</strong></a><br><img height=258 alt=未通过验证测试的表单 src="http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/fig02.jpg" width=415> <br><br>
<p>准备好验证器之后，下一步将应用过滤器。如果说验证器的作用相当于俱乐部里的保镖，过滤器的作用更象一个造型师：过滤器取出表单元素中的数据，过滤掉您不希望看到的内容并传递剩下的内容。有 12 种标准的内置过滤器，可用于去掉空格、从数值中去掉字母、把文本转换为大写、把特定字符转换为 HTML 项以及删除禁止的标记。如果您知道所需的数据位于字段中，但是这些数据需要进行大量删减和处理，这种情况下应使用过滤器。</p>
<p>为了在简单的表单中演示过滤器的作用，将对 <code>elements</code> 数组做一些修改。</p>
<br><a name=N100F5><strong>清单 2. 把过滤器应用到 <code>elements</code> 数组</strong></a><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">'</span><span style="COLOR: #000000">elements</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">text</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">required</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">label</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">validators</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">alpha</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">filters</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">StringToUpper</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">age</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">text</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">required</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">label</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Age</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">validators</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">digits</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">filters</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">digits</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">submit</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">submit</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">label</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Send</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br></span></div>
<p>正如您所见，我们增加了一个过滤器把名字字段全部改为大写，并使用另一个过滤器把年龄字段中的非数字内容全部去掉。现在，当我们提交这些值后，我们会看到如下的结果。</p>
<br><a name=N10104><strong>图 3. 应用过滤器后的表单</strong></a><br><img height=222 alt=应用过滤器后的表单 src="http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/fig03.jpg" width=240> <br><br>
<p>当我们单击 <strong>Send</strong> 后，下列值将通过验证和过滤器，得到如下所示的结果。</p>
<br><a name=N1011A><strong>图 4. 应用验证和过滤器后的表单</strong></a><br><img height=344 alt=应用验证和过滤器后的表单 src="http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/fig04.jpg" width=240> <br><br>
<p>当且仅当存在一个数字并且数字中没有插入错误内容，那么在传递到服务器时，年龄输入、过滤器和验证器以及该组合所需的属性才可以真正确保某个值会通过验证。需要注意的是，名字字段通过验证的惟一方式是名字字段必须以 alpha-字符开头，原因是在这种情况下，过滤器不会帮助这个值通过验证器。</p>
<p>可以使用几种方式呈现完成的表单。表单有一种可以直接使用或回显的呈现方法。可是，大多数表单使用 <code>Zend_View</code> helper 进行呈现。</p>
<p><a name=N10132><span class=atitle><strong><code>Zend_Layout</code> 和 <code>Zend_View</code></strong> </span></a></p>
<p>Zend Framework V1.5 中新的 <code>Zend_Layout</code> 和增强的 <code>Zend_View</code> 组件经常一起提到，这是有原因的。这两个组件协同工作可以成功地在 PHP 应用程序中将表示从控制器中分离出来，并以一种支持快速开发和维护的方式对表示进行标准化。</p>
<p>所有这些意味着什么？</p>
<p>这意味着只要您坚持一些原则并保持代码模块化，那么就可以获得一种标准的、更轻松的方式维护一致的前端。</p>
<p><code>Zend_Layout</code> 并不需要与 Model-View-Controller (MVC) 一同使用。与 Zend Framework 中的大部分组件一样，<code>Zend_Layout</code> 可以被取出并独立使用，可是，当它与 MVC 一同使用时，它就变成了在 <code>Zend_View</code> 和控制器之间的一个方便的适配器，可以有效地把表示划分为一个两步骤（two-step）视图并使站点布局更具普遍性。</p>
<p>无论您是否正使用 MVC 或把<code>Zend_Layout</code> 取出作为独立的组件，必须至少创建一个布局脚本。在其他的实现中有时也称作模板，布局脚本定义了一个 Web 页面的基本前端结构，它们把变量（而不是静态数据）放置在页面上，各个页面显示的数据不尽相同（或者更准确地说，不同的动作所显示的数据是不同的）。布局脚本中占位符变量的填充方式是把布局脚本所需的值分配给布局，告诉布局您希望使用那个特定布局脚本并最终将它呈现为一个页面。</p>
<p>实际的呈现过程由 <code>Zend_View</code> 完成。因此就 <code>Zend_Layout</code> 而言，您可以免费获得 <code>Zend_View</code> 的全部功能。布局脚本应通过视图 helper 进行筛选，否则几乎肯定要做错。视图 helper 是集便利性与标准性于一体的重要组件。</p>
<p>当完成您的布局脚本后，您可以在您的引导程序中创建一个 <code>Zend_Layout</code> 实例并设置您的布局配置选项。在它以这种方式实例化后，您可以从动作中通过动作 helper 访问并重新配置 <code>Zend_Layout</code> 对象。在动作内部，您可以通过编程方式修改您希望 <code>Zend_Layout</code> 实例使用哪个布局脚本，并重新填充每个布局脚本需要的当前变量。从控制器的角度看，最后发送给用户的所有数据被放入一个适配器中，适配器把这些数据用于完全不同的范围。
<hr align=center width="100%" noShade SIZE=1>
<p>&#160;</p>
<p><a name=N10185><span class=atitle><strong>OpenID 和 InfoCard (Web 2.0)</strong></span></a></p>
<p>OpenID 是一个分散式身份识别协议，可跨多个网站使用。它不需要正确的用户名和密码组合，而是提示给用户一个从现有的 OpenID 提供者处得到的 URL 或 XRL。由提供者完成身份验证过程。提供者执行身份验证过程的一种方式是请求一个 InfoCard。当提供者成功地与请求站点完成身份验证通信后，用户就会认为是处于登录状态，并且可以从他的个人 URL 处获得额外的信息。</p>
<p>Zend Framework V1.5 不仅支持将 OpenID 和 InfoCard 作为一个客户机站点，还支持将它们作为 OpenID 提供者。这些组件完全分离，互相之间没有依赖性。这看起来很奇怪，通过 Zend Framework V1.5，您可以开发一个不支持 OpenID 的 OpenID 提供者，反之亦然（这更有意义）。框架中还有一个内置的 InfoCard 组件，它为与 OpenID 协同使用的 InfoCards 提供了依赖方（或支持 OpenID）支持。</p>
<p><a name=N10191><span class=atitle><strong>Lucene 高级搜索</strong></span></a></p>
<p>Lucene 是一个开源的信息检索搜索引擎，以它的全文本索引能力和搜索互联网能力而著名。<code>Zend_Search_Lucene</code> 组件为把 Zend Framework V1.5 交付了内置的全文本高级搜索引擎功能。需要注意的是，虽然 Lucene 是一个搜索引擎，但它没有爬行能力。您必须手动把全部相关内容添加到 <code>Zend_Search_Lucene</code> 的索引中（参见 <a href="http://www.ibm.com/developerworks/cn/opensource/os-php-zendv1.5/?S_TACT=105AGX52&amp;S_CMP=tec-csdn#resources" cmImpressionSent="1"><font color=#5c81a7>参考资料</font></a> 中关于 Lucene 的 developerWorks 文章）。</p>
<p><code>Zend_Search_Lucene</code> 组件并非首先出现在 Zend Framework V1.5 中。这个搜索引擎的早期版本早已实现。可是，Zend Framework V1.5 的发布标志着它从 V1.9 到 V2.2 这一重要升级。通过这一升级， Lucene 组件获得了三种强大的高级搜索选项。</p>
<p>现在它已经支持一个或多个通配符，用于范围搜索或模糊搜索。范围搜索在一个指定上下界的范围内查找指定字段的值，而模糊搜索查找与用户提供的术语相似的单词。例如，对 &#8220;Mike&#8221; 的模糊搜索可能会返回 &#8220;bike&#8221; 和 &#8220;mire&#8221;。</p>
<p>虽然 Lucene 组件进行了升级，原有的功能仍然存在，并且所有以前存在的索引在增强的 <code>Zend_Search_Lucene</code> 组件第一次用到它们时会自动升级。</p>
<p><a name=N101B7><span class=atitle><strong>LDAP 授权</strong></span></a></p>
<p>轻量级目录访问协议（LDAP）在 Zend Framework 中刚刚得到支持。这对于很多开发人员来说是个好消息，比如那些需要创建使用一组现有的正式企业凭证的企业内部网应用程序的开发人员。在 Zend Framework 的文档中需要注意到，当前的支持仅仅是一个最基本的实现，仅仅交付了完成 <code>Zend_Auth_Adapter_LDAP</code> 工作所需的最少功能。</p>
<p>您的 config.ini 文件中指定了有关 LDAP 服务器的信息。当用户需要身份验证时，需要提供用户名和密码组合，这些内容和一些附加的 <code>Zend_LDAP</code> 选项将被发送到 .ini 文件指定的 LDAP 服务器上进行身份验证。就像所有其他的授权适配器一样，只要 <code>Zend_Auth_Adapter_Ldap</code> 从服务器中用下列方法得到一个授权后，它就立即返回一个 <code>Zend_Auth_Result</code> ：<code>getCode()</code> 将返回发生事件的代码（通过或失败）； <code>getIdentity()</code> 将返回进行身份验证尝试的身份；<code>getMessages()</code> 将只包含失败了的身份验证消息；而如果成功通过身份验证则 <code>isValid()</code> 将返回真。</p>
<p><a name=N101E3><span class=atitle><strong>Nirvanix、Technorati 和 SlideShare Web 服务</strong></span></a></p>
<p>三种新的 Web 服务组件也成功加入到 Zend Framework V1.5 中：Nirvanix、Technocrati 和 SlideShare。</p>
<p>Nirvanix 是一个基于互联网的文件存储系统，它允许注册用户通过自己的 API 存储、操作和访问文件。Nirvanix 的设计目的是处理大型的媒体文件（例如视频），并且在能够通过互联网身份验证的任何位置进行访问。</p>
<p>Technorati 是一个博客（blog）搜索引擎，它的 Web 服务允许您对其数据库进行多种不同的查询，包括常规关键字搜索、标记搜索、top 标记搜索、给定关键字的每日博客总数以及 &#8220;cosmos&#8221; 搜索（可返回包含特定 URL 链接的结果）。使用 Technorati，您可以快速了解到当天最热门的网络话题并随时保持关注。</p>
<p>Slideshare.net 是一个为注册用户托管幻灯片的网站。通过 Slideshare 组件，您可以在您的 PHP 应用程序中嵌入由 Slideshare 托管的幻灯片，观看可以共享的幻灯片，还可以为您的 Slideshare 帐户上传新的幻灯片。</p>
<p>这三个组件加入到 Zend Framework 目前支持的 Web 服务列表中。不断增加的 Web 服务组件库使您可以快速、轻松地把来自多个流行网站的内容集成到一个 PHP 应用程序中。这些 Web 服务组件可以单独安装，无需安装其他的 Zend Framework 组件，这种特性非常受欢迎，适合于 PHP 开发新手以及经验丰富、喜欢使用不同框架工作的 PHP 开发人员。</p>
<p>接下来，我们将查看一些特性增强，这种增强是对现有特性和组件的重大更新，现有组件和特性需要进行修改，从而满足不断变化的互联网领域的需求。</p>
<p><a name=N101FB><span class=atitle><strong>Google GData</strong></span></a></p>
<p><code>Zend_GData</code> 组件本质上是面向支持 GData API 的各种 Google 服务的大型适配器。可被 <code>Zend_GData</code> 组件访问的更新后的 GData 服务列表包括：</p>
<ul>
    <li>Google Base
    <li>Google Blogger
    <li>Google Calendar
    <li>Google Codesearch
    <li>Google Documents List
    <li>Google Notebook
    <li>Google Provisioning
    <li>Google Spreadsheets
    <li>Picasa Web Albums
    <li>YouTube </li>
</ul>
<p>也许在 Zend Framework V1.5 中人们最期待的新的 Web 服务支持是对 YouTube API 的支持。现在，通过使用 <code>Zend_GData</code>，您可以使用很多匹配条件搜索并访问 YouTube 视频、访问视频提要和订阅、查看用户个人信息，查看一个特定用户的全部视频和最受欢迎的视频并获取评论。通过现有的功能，可以找到适当的 YouTube 内容并把它们无缝集成到您的 PHP 应用程序中。</p>
<p>目前，Zend Framework 的 YouTube API 支持是只读的。</p>
<p><a name=N1023F><span class=atitle><strong>对 Ajax 支持的改进： <code>ContextSwitch</code> helper 和 REST</strong></span></a></p>
<p>Asynchronous JavaScript + XML (Ajax) 对将信息传送到客户机的浏览器会话的方式产生了深远影响。非常简单：使用 Ajax 客户端 JavaScript 可以请求并接收来自外部信息源的信息，无需离开主窗口位置导航或重新装载。Ajax 大量应用于 Web 应用程序中，如 Gmail，后者在更新信息时保持基础窗口不变，且无需重新装载整个窗口。</p>
<p>Zend Framework V1.5 已经通过 <code>ContextSwitch</code> helper 和 <code>Zend_REST</code> 组件改进了原生 Ajax 支持。</p>
<p><code>ContextSwitch</code> helper 是 <code>Zend_Controller</code> 的一部分，用于以不同的格式或上下文传送现有内容。例如，假设您已经创建了一个用于创建页面的控制器，它列出您在过去三周内吃过的全部早餐的详细信息。通常，这将通过含有布局和视图（与浏览器友好的网站的其余内容保持一致）的页面显示。现在假设某个人问您是否能以 XML 的形式提供同样的列表。使用 <code>ContextSwitch</code>，您不需要再创建单独的控制器。只需告诉 helper 它可以显示 XML 并且创建 XML 视图脚本，而不是普通的上下文视图脚本。它将确保文档扩展和标题恰当且形式良好，并且以 Ajax 友好的 XML 形式显示您的全部早餐。</p>
<p>现在，事情甚至更加简单了：在 Zend Framework V1.5 中有一个 <code>AjaxContext</code> helper，它专门用来将上下文切换到 XML，从而构建 Ajax 响应。</p>
<p>对 Ajax 的支持继续扩展到 <code>Zend_REST</code> 组件，它包含 REST 客户机和全部的 REST 服务器功能。<code>Zend_REST</code> 可用于生成您自己的 Web 服务或访问和解析 Web 服务。当然，您发布的 XML Web 服务可通过 Ajax 轻松地进行访问。</p>
<p><a name=N10278><span class=atitle><strong>结束语</strong></span></a></p>
<p>我们已经了解到，Zend Framework V1.5 实现了很多令人兴奋的进展。某些更新可以简化一些日常任务的正确设置，而其他更新则使选项更容易访问。全部这些更新都为您提供了更加强大的功能，这永远不会是坏事。</p>
<p><br>&nbsp;</p>
<img src ="http://www.phpweblog.net/yemoo/aggbug/4351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2008-06-03 08:43 <a href="http://www.phpweblog.net/yemoo/archive/2008/06/03/4351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP中str_replace函数的详解</title><link>http://www.phpweblog.net/yemoo/archive/2008/03/15/2971.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Sat, 15 Mar 2008 08:33:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2008/03/15/2971.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/2971.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2008/03/15/2971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/2971.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/2971.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在实际的程序开发中，执行字符串替换操作是一件非常经常的事，对str_replace函数的实用也会非常频繁。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这段时间在看《PHP和MySQL Web开发》一书看到str_replace讲解，一段小提示写到：可以为str_replace的三个都使用数组传入，但讲解比较简单，于是决定自己的试验一下该函数在各个参数传入数组时的执行结果。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数原型：mixed str_replace(mixed needle,mixed new_needle,mixed haystack[,int &amp;count]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; needle：要被替换的字符串，new_needle：替换用的字符串，haystack：操作字符串，count：替换次数【可选参数】<br>&nbsp;&nbsp;&nbsp;&nbsp; 我们重点试验前三个在使用数组是的执行方式：<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在都不使用数组时，该函数直接使用new_needle替换所有的needle并返回替换后的字符串。如：str_replace("m","n","my name is jim!")返回ny nane is jin!<br><br>&nbsp;&nbsp;&nbsp;&nbsp; <strong>1、只对needle使用数组。<br></strong>&nbsp;&nbsp;&nbsp;&nbsp; 示例：str_replace(array('m','i'),'n',"my name is jim!");返回：ny nane ns jnn!<br>&nbsp;&nbsp;&nbsp;&nbsp; 可以看出，函数顺序性的对数组中每个字符串进行替换，并返回替换后的字符串。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>2、只对new_needle使用数组。</strong><br>&nbsp;&nbsp;&nbsp;&nbsp; 示例：str_replace('m',array('n','z'),"my name is jim!\n")返回：Arrayy naArraye is jiArray!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该替换比较有意思，如果只对第二个参数使用数组则函数将其作为字符串Array进行使用，将所有的needle替换为了数组。<br>&nbsp;&nbsp;&nbsp;&nbsp; <strong>3、只对haystack使用数组。</strong><br>&nbsp;&nbsp;&nbsp;&nbsp; 示例：str_replace("m","n",array("my name is jim!","the game is over!"))该语句执行结果返回一个数组，即分别为传入的两个字符串替换后的结果。<br>&nbsp;&nbsp;&nbsp;&nbsp; 如果输出数组内容会看到：ny nane is jin! the gane is over!<br><br>&nbsp;&nbsp;&nbsp;&nbsp; <strong>4、对needle和new_needle都使用数组</strong>。<br>&nbsp;&nbsp;&nbsp;&nbsp; 示例：str_replace(array("m","i"),array("n","z"),"my name is jim!")返回：ny nane zs jzn!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看执行结果可以发现，如果前两个参数都使用数组则函数把数组各个对象项字符串进行了替换，及needle的第一项替换为new_needle的第一项。以此类推。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果needle数组比new_deedle长，例如：str_replace(array("m","i","s"),array("n","z"),"my name is jim!");返回：ny nane z jzn!可见，对于needle数组多出来的字符串被替换为了空串。<br>&nbsp;&nbsp;&nbsp;&nbsp; 如果new_needle数组比needle长，例如：str_replace(array("m","i"),array("n","z","x"),"my name is jim!")返回ny nane zs jzn!可见new_needle多余的项被忽略。<br>&nbsp;&nbsp;&nbsp;&nbsp; <strong>5、三个参数都使用数组。</strong><br>&nbsp;&nbsp;&nbsp;&nbsp; 例如：str_replace(array("m","i"),array("n","z"),array("my name is jim!","the game is over"))返回的数组内容：ny nane zs jzn!the gane zs over<br>&nbsp;&nbsp;&nbsp;&nbsp; 这个比较好理解，对两个字符串分别执行替换。<br><br>&nbsp;&nbsp;&nbsp; 简单总结下，防止自己忘记!</p>
<img src ="http://www.phpweblog.net/yemoo/aggbug/2971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2008-03-15 16:33 <a href="http://www.phpweblog.net/yemoo/archive/2008/03/15/2971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP基础知识学习总结--不断更新中</title><link>http://www.phpweblog.net/yemoo/archive/2008/01/05/2649.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Sat, 05 Jan 2008 10:05:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2008/01/05/2649.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/2649.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2008/01/05/2649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/2649.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/2649.html</trackback:ping><description><![CDATA[1、PHP中变量都以$开头，如$a,$ab等都是变量，而函数名和常量则都是直接使用字符串/下划线开头。<br>2、定义常量使用define(name,value)的方式定义，注意常量只能包含字母数字下划线，且不能以数字开头。<br>3、定义的变量如果要在输出的字符串中引用则直接写在双引号中即可，如$a=" world";echo("hello$a");输出hello world。<br>4、php5中变量常量函数命名都支持汉字，但不建议使用。如$我="一个好人";echo($我)输出&#8220;我是好人&#8221;。<br>5、php中变量与变量及变量与常量等之间的连接符为.（点号）。如$a="a";$b="$b";echo($a.$b)输出ab。<br>6、php中全局变量与局部变量的范围完全分离，局部变量在全局不能访问，同时全局变量在函数等内部也访问不到。如
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$xp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">global&nbsp;var!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;func(){;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$xp</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
将出现找不到变量$xp的错误提示。<br>7、几个常用的PHP常量：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font style="COLOR: #000000" color=#007700><strong>__FILE__：</strong>当前文件在服务器中的绝对存放路径：如</font><font color=#000000>D:\php\test\PHP-1.php<br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=#007700><span style="COLOR: #000000"><strong>PHP_VERSION：</strong>服务器PHP的版本号，如<font color=#000000>5.2.3<br>&nbsp;&nbsp;&nbsp;&nbsp; <font style="COLOR: #000000" color=#007700><strong>PHP_OS：</strong>服务器操作系统，如WINNT。<br>&nbsp;&nbsp;&nbsp;&nbsp; <strong>TRUE/FALSE：</strong>代表true/false值。<br></font>8、php注释方式有三种，分别为：<br>&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #339966">//</span> 单行注释<br>&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #339966">/*</span> 多行注释 <span style="COLOR: #339966">*/<br></span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #339966">#</span> unix shell方式注释<br>9、静态变量其实就是不能在外部访问的全局变量。<br>10、PHP中对于大小写的区别比较特殊：对于变量和常量定义是区分大小写的，而对于函数和类是不区分大小写的。<br>如定义了$TEst="test";则echo出$test、$TEST等都不会显示结果test。<br>而定义函数function test(){echo "test"}则不论使用TEST()还是teST()等都能正确输出结果test。<br><br></font></span><span style="COLOR: #000000">11、有关php函数参数的几点说明：<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #000000">(1)可以为每个参数指定默认值,如function test($arg1="默认值1"){}。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)可以在参数列表中定义某个参数使用传值方式还是传地址方式（使用&amp;+参数变量）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如function test(&amp;arg1)。<br></span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">php<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;test(</span><span style="COLOR: #800080">$arg1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">$arg2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">arg2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&amp;</span><span style="COLOR: #800080">$arg3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">arg3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">$arg4</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">arg4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$br</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n&lt;br&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$arg1</span><span style="COLOR: #000000">.</span><span style="COLOR: #800080">$br</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$arg2</span><span style="COLOR: #000000">.</span><span style="COLOR: #800080">$br</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$arg3</span><span style="COLOR: #000000">.</span><span style="COLOR: #800080">$br</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$arg4</span><span style="COLOR: #000000">.</span><span style="COLOR: #800080">$br</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$arg3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">testnew</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;test(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">yy</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">$c</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">$c</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #000000">?&gt;</span></div>
<p><span style="COLOR: #000000">以上代码将输出：<br>xx <br>yy <br>test <br>arg4 <br>testnew</span><br></font><br></p>
</font>
<img src ="http://www.phpweblog.net/yemoo/aggbug/2649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2008-01-05 18:05 <a href="http://www.phpweblog.net/yemoo/archive/2008/01/05/2649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP也要做Windows平台的一等公民【转自infoQ】</title><link>http://www.phpweblog.net/yemoo/archive/2007/10/18/2096.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Thu, 18 Oct 2007 09:49:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2007/10/18/2096.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/2096.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2007/10/18/2096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/2096.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/2096.html</trackback:ping><description><![CDATA[<p>虽然PHP已经被众多大型网站采用，但Windows平台似乎总是给它&#8220;二等公民&#8221;的待遇，这突出体现在PHP代码在Windows平台的执行效率上。不过面对Java、Ruby和Flash社区的压力，微软将在即将发布的Windows Server 2008中提供用于IIS 7的免费模块——FastCGI，该模将帮助PHP提升为Windows平台的&#8220;一等公民&#8221;。</p>
<p>在近期召开的<a href="http://www.zendcon.com/" target=_blank>Zend Conference</a>上，该公司公布了一系列吸引Windows平台开发人员的利好消息，其中PHP在Windows平台执行效率会有较大提升的消息格外引人注目。Zend与微软合作的成果是一个叫FastCGI的IIS模块，虽然之前Zend之前曾经自己开发过一个同名的模块，但由于没有操作系统底层机制的支持，该模块很快成为历史。随着Flash和J2EE的快速发展，PHP与ASP.NET理智地走到一起，通过此次合作Zend获得了来自微软提供的面向IIS 6、IIS 7、SQL Server 2005和SQL Server 2008的专用扩展，而微软也得到了PHP对ASP.NET、CardSpace（.NET 3.0+提供的身份机制）的互操作支持。</p>
<p>之前为了充分招揽开发团队，PHP对Linux平台作了专门的定制，同时由于&#8220;开源&#8221;的优势，它获得了IBM和Oracle的支持，其中Zend Studio for Eclipse将会在Eclipse框架下，借助相关的开源产品形成PHP的全开发生命期的支持。由于与Web的密切关系，为了进一步适应SOA环境的需要，Zend也致力于自己Zend Framework的开发，虽然Zend声称该产品是对.NET Framework和Java EE的有利回应，但它还需要依赖IBM、Google和微软的支持，毕竟相关Web Service标准中IBM和微软的势力还是最大的，而Google API则代表着下一轮面向Web架构（WOA）的趋势。</p>
<p>在数据库支持方面，PHP与MySQL的融合一直很默契，但考虑到主流商用数据库的市场份额，为了能适应企业环境的开发，PHP曾经与Oracle、DB2多次进行了阶段性合作，对上述三个数据库提供比较全面的支持。但对于SQL Server 2005而言，PHP一直只能算是编外，在连通性方面不仅与Native的ASP.NET有很大差别，与Java也有很大差距，考虑到PHP开发团队绝大部分在Windows平台工作，而且SQL Server普遍存在于各种规模的公司，相对MySQL、Oracle、DB2而言SQL Server 2005对于中小型规模项目有比较&#8220;中庸&#8221;的优势，因此此次Zend与微软合作的另一个重点就是SQL Server 2005（以及即将发布的SQL Server 2008）。</p>
<p>此外，此次会议上Zend还公布了下一版本PHP计划要发布的新特性，包括命名空间（Namespace）和国际化支持（Internationalization），这些都会让PHP向一个更&#8220;程序员&#8221;化的语言发展。<br></p>
<img src ="http://www.phpweblog.net/yemoo/aggbug/2096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2007-10-18 17:49 <a href="http://www.phpweblog.net/yemoo/archive/2007/10/18/2096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java上的PHP：对两者都好？【转自infoQ】</title><link>http://www.phpweblog.net/yemoo/archive/2007/10/18/2095.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Thu, 18 Oct 2007 09:34:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2007/10/18/2095.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/2095.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2007/10/18/2095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/2095.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/2095.html</trackback:ping><description><![CDATA[<p>　　越来越多的迹象表明PHP与Java/JEE开发社区的关系越来越密切，越来越明显。IBM和Caucho都为Java上的PHP架构进行了巨大的投入。Sun、Oracle和BEA在过去的18个月中，也都宣布了集成PHP或者与Zend建立伙伴关系。Jerry Cuomo（IBM的WebSphere CTO）和Scott Ferguson（Resin Java Application Server及最近的Quercus PHP引擎）与我们一起讨论了PHP如何融入Java的世界。目前IBM在Java/PHP混合系统方面最直接的投入是Project Zero，一个开发中的新的Web框架，支持Groovy和PHP脚本语言。当被问到为何IBM选择在Project Zero项目里支持PHP，Jerry有些话要说： </p>
<p>　　Jerry：三个词——敏捷性（Agility）、内容（Content）、训练（Educated）。是的，PHP是我们的ACE。 </p>
<p>　　敏捷性（Agility）。J2EE应用是为了&#8220;永久的价值&#8221;而优化的&#8230;&#8230;也就是说，写出来的程序是打算要一直运行下去。PHP脚本是为了&#8220;在周五之前投入运行&#8221;而优化的。也就是说，PHP让你快速简洁地编写代码，这对于许多应景而生的应用是合适的。 </p>
<p>　　内容（Content）。我们叫它&#8220;剪贴式编程&#8221;。网上有不计其数的PHP资源。你很少需要从头开始编写什么东西。搜索，剪切，粘贴，你就可以收工了&#8230;&#8230;（这又涉及到敏捷性）。 </p>
<p>　　训练（Educated）。PHP很容易自学。编写PHP脚本对很多人来说都非常容易，即使是没有受过正规计算机科学教育的人。例如，像内存管理和线程这种复杂的东西，在你编写PHP脚本的时候绝不会成为注意力的中心。而且就如我在上一点所说，大多数时候你都是在修改利用别人的代码。</p>
<p>　　Caucho采取的途径与IBM不同。Project Zero看起来好像是一个Java/Groovy框架，只不过刚好也支持PHP语言。而Quercus，是能够与mod_php竞争的完整的PHP语言实现。它是一个令人印象深刻的实现。事实上整个PHP解释器都是用Java编写的，因此不仅能够提供原生的Java/PHP集成，还有效利用了JVM的强大能力来达到极高的效率和安全性。对于从技术的角度看，Java如何令Quercus脱颖而出，Scott如是说： </p>
<p>　　Scott：Java平台的线程、缓存和池技术是Quercus成功的关键。大多数Quercus库的实现都只是对相应Java功能的包装。例如，数据库访问就是对JDBC的包装。因为Java平台已经提供了坚实的基础，Quercus不费吹灰之力就得到了那些强大的能力。 </p>
<p>　　而且反射、内存管理、JDK 1.5 Annotation和动态编译/类装载，这些都是Quercus所需的。虽然我们不能像C PHP一样使用智能指针来编程，我们却可以获得干净的OO设计，并依赖Java去处理内存的问题。 </p>
<p>　　当然还有运行分析（profiling）。Quercus自动从JVM的CPU和堆运行分析中得益。因为编译后的Quercus函数实际上就是Java方法，我们可以准确地从运行分析中看出哪一块代码运行得太慢或者消耗了太多内存。 </p>
<p>　　快速、轻量并且广泛接受的Web层框架一直是Java平台难以完成的目标，我们向Jerry和Scott两人都提出了同一个问题：他们投入于PHP运行时的领域，是否由于感觉到Java社区已经放弃了使用基于Java的框架来完成高效Web层开发，转而在这一层使用动态脚本语言。他们都认为我的提问夸大了弃用Java的趋势，他们如此描述使用Java和使用PHP之间的平衡： </p>
<p>　　Jerry：&#8220;转移&#8221;和&#8220;放弃&#8221;的说法有点过了。我觉得应该说我们正&#8220;把Java提升到更高级的行政职位上&#8221;。Java自己赢得了这样的位置。这并不是一个非黑即白的问题。除了Java目前的角色，我相信它可以成为这些动态脚本语言的&#8220;系统编程&#8221;环境。就像Java与C/C++的关系。现在Java（以及JVM）需要成长（和退缩）来支持各种DSL。例如，当今的Java是为长期运行的应用和进程而优化的。DSL则是短命的，经常来来去去。 </p>
<p>　　Scott：我们不建议完全抛弃Java。Web应用框架底下的基础设施如Spring、JPA/Hibernate，工具如Coherence，测试框架如JUnit，Java在这些方面是无与伦比的，远胜过脚本世界中任何东西。除此之外，应用级缓存、服务、事件和线程这些不为人所见的东西用Java会好得多。如果你看看像Mediawiki（维基百科所用的程序）这样的PHP应用，可以明显地看出底层代码如果用Java编写会好很多。 </p>
<p>　　Quercus/PHP的成功之处是在它的表现层，脚本可以满足许多特别要求灵活性的情况。Java表现框架如JSF、JSP/JSTL、Struts、Velocity，没有一个能达到完整的脚本语言的灵活性和库能力。许多框架，如JSP/JSTL，都是部分的语言实现。为什么不干脆用一个完整的脚本语言，再加上一个庞大的库呢？已经有巨大数量的网站证明了这种脚本语言的成功。 </p>
<p>　　因此我们认为结合Java（用在后台、模型和底层服务），把PHP/Quercus用于表现层以及任何需要脚本的地方（如取代BPEL），会是最佳的选择。 <br>我们还问到如何比较PHP和其他语言，如Ruby和Groovy。我们请Scott告诉我们为什么他写了一个PHP而不是Ruby解释器？ </p>
<p>　　Scott：我们希望选择一门已经在Web开发社区里证明了自身的语言，而PHP是占统治地位的语言。Ruby目前仍然是一门实验性的语言。Ruby语言虽然有很多令人喜爱之处，但也有一些问题。Ruby使用了一些高级语言结构如闭包和Continuation，从这个方面来说很像Scheme。我个人很喜欢这些特性，但我的经历告诉我很多程序员都会被这些东西吓倒，因此会损害接受程度。PHP就像BASIC，任何人都可以学会。我会捧Ruby的场，我希望它成功，但当我们必须选择如何分配有限的时间，我们不得不先让Ruby等等看。 </p>
<p>　　我们问Jerry是否认为PHP会继续成长，特别是在面临Ruby on Rails的竞争之下。我们还询问了PHP5中引入的面向对象是否让PHP更适合Project Zero这样的框架。最后，由于Project Zero同时支持Groovy和PHP，我们问Jerry一个新接触Project Zero并且不懂Groovy也不懂PHP的开发者，应该选择哪种语言： </p>
<p>　　Jerry：PHP是和Ruby或者Groovy不一样的动态脚本语言&#8230;&#8230;这话大概没错。不过，要想让世界上最受欢迎的应用（想想看Wordpress、PHPBB&#8230;&#8230;）都用这些语言编写，它们还有很长的路要走。只要PHP应用还在发挥作用，就会有新的开发者学习PHP。考虑到大学生中流行的大多数工具都是用PHP写的，将会继续出现新一代的PHP程序员。 </p>
<p>　　虽然如此，PHP是否会继续成长还不清楚&#8230;&#8230;它已经很庞大了，而且还存在很多竞争者，它们的语法更加清晰更加简洁。到时候再看。 </p>
<p>　　不过，（PHP语言有或没有OO特性）这并不是PHP被包括进Project Zero的原因。包括它是因为ACE。&#8230;&#8230;如果你是一名Java程序员，应该从Groovy开始。Java程序员已经期盼了很久Project Zero所提供的那种敏捷特征。我们希望这对你&#8220;百利而无一害&#8221;。你既可以接着用Java，又可以做动态脚本编程。然而，如果你没有深厚的Java背景，或者你打算利用网上已经存在的资源——PHP是创造敏捷应用的好手段。<br></p>
<img src ="http://www.phpweblog.net/yemoo/aggbug/2095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2007-10-18 17:34 <a href="http://www.phpweblog.net/yemoo/archive/2007/10/18/2095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关PHP中的大小写区分</title><link>http://www.phpweblog.net/yemoo/archive/2007/09/30/2055.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Sun, 30 Sep 2007 10:06:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2007/09/30/2055.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/2055.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2007/09/30/2055.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/2055.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/2055.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;<br>&nbsp; PHP语法有些特别，其中之一就是对大小写的区分上。<br><br>&nbsp; 在PHP中，变量是区分大小写的，而函数和类名是不区分大小写的。<br>&nbsp; 这是他与其他编程语言的一个显著区别，谨记这个特点！<br><br>&nbsp; 但在编程中还是建议有一个好的变成习惯，尽可能不要用名称相同大小写不同的函数名或类名。 
<img src ="http://www.phpweblog.net/yemoo/aggbug/2055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2007-09-30 18:06 <a href="http://www.phpweblog.net/yemoo/archive/2007/09/30/2055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP中的几种特殊运算符</title><link>http://www.phpweblog.net/yemoo/archive/2007/09/30/2054.html</link><dc:creator>Yemoo'S PHP Home</dc:creator><author>Yemoo'S PHP Home</author><pubDate>Sun, 30 Sep 2007 09:43:00 GMT</pubDate><guid>http://www.phpweblog.net/yemoo/archive/2007/09/30/2054.html</guid><wfw:comment>http://www.phpweblog.net/yemoo/comments/2054.html</wfw:comment><comments>http://www.phpweblog.net/yemoo/archive/2007/09/30/2054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/yemoo/comments/commentRss/2054.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/yemoo/services/trackbacks/2054.html</trackback:ping><description><![CDATA[在PHP中有一些符号是有特殊用途的，列举如下：<br><br>
<table border=1>
    <tbody>
        <tr>
            <th>符号</th>
            <th>意义</th>
        </tr>
        <tr>
            <td>$</td>
            <td>变量</td>
        </tr>
        <tr>
            <td>&amp;</td>
            <td>变量的地址 (加在变量前)</td>
        </tr>
        <tr>
            <td>@</td>
            <td>不显示错误信息 (加在函数前)</td>
        </tr>
        <tr>
            <td>-&gt;</td>
            <td>类的方法或者属性</td>
        </tr>
        <tr>
            <td>=&gt;</td>
            <td>数组的元素值</td>
        </tr>
        <tr>
            <td>?&nbsp;:</td>
            <td>三元运算子</td>
        </tr>
    </tbody>
</table>
<br>
<img src ="http://www.phpweblog.net/yemoo/aggbug/2054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/yemoo/" target="_blank">Yemoo'S PHP Home</a> 2007-09-30 17:43 <a href="http://www.phpweblog.net/yemoo/archive/2007/09/30/2054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>