<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[隐然依旧_我来帮 - php专版]]></title>
<link>http://www.wtwlb.com/</link>
<description><![CDATA[以城感人者,人亦诚而应]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[ningjian198906@163.com(ningjian)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>隐然依旧_我来帮</title>
	<url>http://www.wtwlb.com/images/logos.gif</url>
	<link>http://www.wtwlb.com/</link>
	<description>隐然依旧_我来帮</description>
</image>

			<item>
			<link>http://www.wtwlb.com/article.asp?id=241</link>
			<title><![CDATA[PHP按比例放大缩小图片的函数]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Wed,18 Aug 2010 18:34:43 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=241</guid>
		<description><![CDATA[<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>(</span><span class="vars">$oldwidth</span><span>,</span><span class="vars">$oldheight</span><span>,</span><span class="vars">$imgwidth</span><span>,</span><span class="vars">$imgheight</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//$oldwidth设置的宽度，$oldheight设置的高度，$imgwidth图片的宽度，$imgheight图片的高度；&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="comment">//单元格装得能装得进图片，则按图片的真实大小显示； </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">if</span><span>(</span><span class="vars">$imgwidth</span><span>&lt;=</span><span class="vars">$oldwidth</span><span>&amp;</span><span class="vars">$imgheight</span><span>&lt;=</span><span class="vars">$oldheight</span><span>) &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$arraysize</span><span>=</span><span class="keyword">array</span><span>(</span><span class="string">'width'</span><span>=&gt;</span><span class="vars">$imgwidth</span><span>,</span><span class="string">'height'</span><span>=&gt;</span><span class="vars">$imgheight</span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$arraysize</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li><span class="vars">$suoxiaowidth</span><span>=</span><span class="vars">$imgwidth</span><span>-</span><span class="vars">$oldwidth</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$suoxiaoheight</span><span>=</span><span class="vars">$imgheight</span><span>-</span><span class="vars">$oldheight</span><span>; &nbsp;&nbsp;</span></li>
    <li><span class="vars">$suoxiaoheightper</span><span>=</span><span class="vars">$suoxiaoheight</span><span>/</span><span class="vars">$imgheight</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$suoxiaowidthper</span><span>=</span><span class="vars">$suoxiaowidth</span><span>/</span><span class="vars">$imgwidth</span><span>; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">if</span><span>(</span><span class="vars">$suoxiaoheightper</span><span>&gt;=</span><span class="vars">$suoxiaowidthper</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li><span class="comment">//单元格高度为准； </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$aftersuoxiaowidth</span><span>=</span><span class="vars">$imgwidth</span><span>*(1-</span><span class="vars">$suoxiaoheightper</span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="vars">$arraysize</span><span>=</span><span class="keyword">array</span><span>(</span><span class="string">'width'</span><span>=&gt;</span><span class="vars">$aftersuoxiaowidth</span><span>,</span><span class="string">'height'</span><span>=&gt;</span><span class="vars">$oldheight</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$arraysize</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li><span>{&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//单元格宽度为准； </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$aftersuoxiaoheight</span><span>=</span><span class="vars">$imgheight</span><span>*(1-</span><span class="vars">$suoxiaowidthper</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$arraysize</span><span>=</span><span class="keyword">array</span><span>(</span><span class="string">'width'</span><span>=&gt;</span><span class="vars">$oldwidth</span><span>,</span><span class="string">'height'</span><span>=&gt;</span><span class="vars">$aftersuoxiaoheight</span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$arraysize</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=240</link>
			<title><![CDATA[PHP编程里你所不知道的10个技巧]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Wed,18 Aug 2010 18:32:17 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=240</guid>
		<description><![CDATA[<p>1. 使用 ip2long() 和 long2ip() 以整型(integer)方式储存IP地址到数据库，而非字符串方式。这将几乎减少一半的储存空间（char(15)15个字节，integer则是8个字节），而且也更容易计算某一IP地址是否在一个范围之内。同时也加速搜索和排序。</p>
<p>2. 应用checkdnsrr()检查域名是否存在，来验证email地址的一部分。这个checkdnsrr()内建函数可以通过相应的域名或者IP地址查询DNS记录。有PHP开发者利用这个函数编写了一个自定义函数，能验证email地址的一部分，点击查看。请注意，此函数在windows平台尚未实现！请用 PEAR 程序库的 Net_DNS 代替。</p>
<p>3. 如果你使用PHP 5 + MySQL 4.1 版本组合或其版本以上，得试试改进的 mysqli_* 函数，而不用 mysql_* 函数。mysqli_* 函数的一个优越的特点是可以使用 prepared 语句。如果你维护一个对数据库依赖性很大的网站，这个函数将大大提升数据库的查询速度。不信你可以看看这篇性能测试文章&mdash;MySQLi vs MySQL。最终结果是 mysqli_stmt &gt; mysql_query &gt; mysqli_query &gt; mysqli_multi_query 。mysqli_stmt最佳。</p>
<p>4. 学会、爱用三元操作符( ternary operator )。也就是if/else条件语句的代替，用 &ldquo;?:&rdquo; 表示。</p>
<p>5. 不必重造车轮，先看看PEAR 程序库有没有人已经发明这个轮子了。</p>
<p>6. highlight_file()能格式化你的代码，美观漂亮。</p>
<p>7. 使用 error_reporting(0) 函数，阻止潜在的敏感错误信息显示给用户。最好的情况是能在服务器上配置php.ini文件，直接屏蔽错误报告的显示。但是如果使用虚拟主机就没那么幸运能够编辑修改php.ini文件了，得使用另外的方法：在php代码首行添加error_reporting(0); 语句。这样的好处是使得SQL查询语句和服务器的物理路径等这些敏感错误信息完全不显示给用户。</p>
<p>8. 大量字符串文本储存入数据库之前，使用 gzcompress() 和 gzuncompress() 进行压缩和解压缩的转换。这个内建函数使用gzip算法，对文本的压缩率达90％以上。当然，经过压缩就无法进行全文搜索了。</p>
<p>9. 在函数的参数传递中使用&rdquo;引用传递&rdquo;，可以返回多个值。有编程语言基础的程序员在其它语言就知道这个用法了；然而一些只会html语言的网页设计者就感到困惑了。答案就是使用 &ldquo;&amp;&rdquo; 符号处理变量，并以引用传递而非按值传递。</p>
<p>10. 完全理解 &ldquo;magic quotes&rdquo;和SQL注入攻击的危险性。如果你从未听过SQL注入攻击[ SQL injection] ，你得花点时间了解一下了。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=239</link>
			<title><![CDATA[提高PHP执行效率的53个技巧]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Wed,18 Aug 2010 18:30:43 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=239</guid>
		<description><![CDATA[<p>单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会，注意：只有echo能这么做，它是一种可以把多个字符串当作参数的&ldquo;函数&rdquo;（译注：PHP手册中说echo是语言结构，不是真正的函数，故把函数加上了双引号）。</p>
<p>1、如果能将类的方法定义成static，就尽量定义成static，它的速度会提升将近4倍。</p>
<p><br />
2、$row[&rsquo;id&rsquo;] 的速度是$row[id]的7倍。</p>
<p><br />
3、echo 比 print 快，并且使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接，比如echo $str1,$str2。</p>
<p>4、在执行for循环之前确定最大循环数，不要每循环一次都计算最大值，最好运用foreach代替。</p>
<p>5、注销那些不用的变量尤其是大数组，以便释放内存。</p>
<p>6、尽量避免使用__get，__set，__autoload。</p>
<p>7、require_once()代价昂贵。</p>
<p>8、include文件时尽量使用绝对路径，因为它避免了PHP去include_path里查找文件的速度，解析操作系统路径所需的时间会更少。</p>
<p><br />
9、如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[&lsquo;REQUEST_TIME&rsquo;]要好于time()。</p>
<p>10、函数代替正则表达式完成相同功能。</p>
<p>11、str_replace函数比preg_replace函数快，但strtr函数的效率是str_replace函数的四倍。</p>
<p>12、如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换的参数。</p>
<p>13、使用选择分支语句（译注：即switch case）好于使用多个if，else if语句。</p>
<p>14、用@屏蔽错误消息的做法非常低效，极其低效。</p>
<p>15、打开apache的mod_deflate模块，可以提高网页的浏览速度。</p>
<p>16、数据库连接当使用完毕时应关掉，不要用长连接。</p>
<p>17、错误消息代价昂贵。</p>
<p>18、在方法中递增局部变量，速度是最快的。几乎与在函数中调用局部变量的速度相当。</p>
<p>19、递增一个全局变量要比递增一个局部变量慢2倍。</p>
<p><br />
20、递增一个对象属性（如：$this-&gt;prop++）要比递增一个局部变量慢3倍。</p>
<p>&nbsp;</p>
<p>21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。</p>
<p>22、仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。</p>
<p>&nbsp;</p>
<p>23、方法调用看来与类中定义的方法的数量无关，因为我（在测试方法之前和之后都）添加了10个方法，但性能上没有变化。</p>
<p>24、派生类中的方法运行起来要快于在基类中定义的同样的方法。</p>
<p>25、调用带有一个参数的空函数，其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。</p>
<p>26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。</p>
<p>27、除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能，以免除编译开销。</p>
<p>28、尽量做缓存，可使用memcached。memcached是一款高性能的内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码 (OP code)的缓存很有用，使得脚本不必为每个请求做重新编译。</p>
<p>&nbsp;</p>
<p>29、当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C的内置数据结构，用于存储PHP变量）中存储的已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用的函数一起执行。在某些情况下，你可以使用isset() 技巧加速执行你的代码。<br />
（举例如下）</p>
<p>if (strlen($foo) &lt; 5) { echo &ldquo;Foo is too short&rdquo;$$ }</p>
<p><br />
（与下面的技巧做比较）</p>
<p>if (!isset($foo{5})) { echo &ldquo;Foo is too short&rdquo;$$ }</p>
<p>调用isset()恰巧比strlen()快，因为与后者不同的是，isset()作为一种语言结构，意味着它的执行不需要函数查找和字母小写化。也就是说，实际上在检验字符串长度的顶层代码中你没有花太多开销。</p>
<p>34、当执行变量$i的递增或递减时，$i++会比++$i慢一些。这种差异是PHP特有的，并不适用于其他语言，所以请不要修改你的C或Java代码并指望它们能立即变快，没用的。++$i更快是因为它只需要3条指令(opcodes)，$i++则需要4条指令。后置递增实际上会产生一个临时变量，这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种，正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意，因为并不是所有的指令优化器都会做同样的优化处理，并且存在大量没有装配指令优化器的互联网服务提供商（ISPs）和服务器。</p>
<p>35、并不是事必面向对象(OOP)，面向对象往往开销很大，每个方法和对象调用都会消耗很多内存。</p>
<p><br />
36、并非要用类实现所有的数据结构，数组也很有用。</p>
<p>37、不要把方法细分得过多，仔细想想你真正打算重用的是哪些代码？</p>
<p>&nbsp;</p>
<p>38、当你需要时，你总能把代码分解成方法。</p>
<p><br />
39、尽量采用大量的PHP内置函数。</p>
<p>40、如果在代码中存在大量耗时的函数，你可以考虑用C扩展的方式实现它们。<br />
41、评估检验(profile)你的代码。检验器会告诉你，代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序，评估检验总体上可以显示出代码的瓶颈。<br />
42、mod_zip可作为Apache模块，用来即时压缩你的数据，并可让数据传输量降低80%。</p>
<p>43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下，尽量用file_get_contents，因为他的效率高得多！但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题；</p>
<p>44、尽量的少进行文件操作，虽然PHP的文件操作效率也不低的；</p>
<p>45、优化Select SQL语句，在可能的情况下尽量少的进行Insert、Update操作(在update上，我被恶批过)；</p>
<p>46、尽可能的使用PHP内部函数（但是我却为了找个PHP里面不存在的函数，浪费了本可以写出一个自定义函数的时间，经验问题啊！）；</p>
<p>47、循环内部不要声明变量，尤其是大变量：对象(这好像不只是PHP里面要注意的问题吧？)；</p>
<p>48、多维数组尽量不要循环嵌套赋值；</p>
<p>49、在可以用PHP内部字符串操作函数的情况下，不要用正则表达式；</p>
<p>50、foreach效率更高，尽量用foreach代替while和for循环；</p>
<p>51、用单引号替代双引号引用字符串；</p>
<p>52、&ldquo;用i+=1代替i=i+1。符合c/c++的习惯，效率还高&rdquo;；</p>
<p>53、对global变量，应该用完就unset()掉；</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=225</link>
			<title><![CDATA[40条优化php代码的小实例]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Mon,07 Jun 2010 19:39:02 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=225</guid>
		<description><![CDATA[<p>40条优化php代码的小实例<br />
1.如果一个方法能被静态，那就声明他为静态的，速度可提高1/4;<br />
2.echo的效率高于print,因为echo没有返回值，print返回一个整型;<br />
3.在循环之前设置循环的最大次数，而非在在循环中;<br />
4.销毁变量去释放内存，特别是大的数组;<br />
5.避免使用像__get, __set, __autoload等魔术方法;<br />
6.requiere_once()比较耗资源;<br />
7.在includes和requires中使用绝对路径，这样在分析路径花的时间更少;<br />
8.如果你需要得sexinsex到脚本执行时的时间，$_SERVER['REQUSET_TIME']优于time();<br />
9.能使用字符处理函数的，尽量用他们，因为效率高于正则;<br />
10.str_replace字符替换比正则替换preg_replace快，但strtr比str_replace又快1/4;<br />
11.如果一个函数既能接受数组又能接受简单字符做为参数，例如字符替换，并且参数列表不是太长，可以考虑多用一些简洁的替换语句，一次只替换一个字符，而不是接受数组做为查找和替换参数。大事化小，1+1&gt;2;<br />
12.用@掩盖错误会降低脚本运行速度;<br />
13.$row['id']比$row[id]速度快7倍，建议养成数组键加引号的习惯;<br />
14.错误信息很有用;<br />
15.在循环里别用函数，例如For($x=0; $x &lt; count($array); $x), count()函数在外面先计算;<br />
16.在方法里建立局部变量速度最快，97xxoo几乎和在方法里调用局部变量一样快;<br />
17.建立一个全局变量要比局部变量要慢2倍;<br />
18.建立一个对象属性（类里面的变量）例如（$this-&gt;prop++）比局部变量要慢3倍;<br />
19.建立一个未声明的局部变量要比一个初始化的局部变量慢9-10倍;<br />
20.声明一个未被任何一个函数使用过的全局变量也会使性能降低（和声明相同数量的局部变量一样），PHP可能去检查这个全局变量是否存在;<br />
21.方法的性能和在一个类里面定义的方法的数目没有关系，因为我添加10个或多个方法到测试的类里面（这些方法在测试方法的前后）后性能没什么差异;<br />
22.在子类里方法的性能优于在基类中;<br />
23.只调用一个参数并且函数体为空的函数运行花费的时间等于7-8次$localvar++运算，而一个类似的方法（类里的函数）运行等于大约15次$localvar++运算;<br />
24.Surrounding your string by &lsquo; instead of &rdquo; will make things interpret a little faster since php looks for variables inside &ldquo;&hellip;&rdquo; but not inside &lsquo;&hellip;&rsquo;. Of course you can only do this when you don&rsquo;t need to have variables in the string.<br />
25.当输出字符串时用逗号代替点分割更快些。注意：这只对echo起作用，这个函数能接受一些字符串作为参数;<br />
26.在apache服务器里一个php脚本页面比相应的HTML静态页面生成至少要多花2-10倍的时间，建议多用些静态HTML页面和少量的脚步;<br />
27.除非你的安装了缓存，不然你的php脚本每次被访问都需要被重编译。建议安装个php缓存程序，这样通过去除一些重复的编译来很明显的提高你20-100%的性能;<br />
28.建议用memcached，高性能的分布式内存对象缓存系统，提高动态网络应用程序性能，减轻数据库的负担;<br />
29.使用ip2long()和long2ip()函数把IP地址转成整型存放进数据库而非字符型。这几乎能降低1/4的存储空间。同时可以很容易对地址进行排序和快速查找;<br />
30.使用checkdnsrr()通过域名存在性来确认部分email地址的有效性，这个内置函数能保证每一个的域名对应一个IP地址;<br />
31.如果你在使用php5和mysql4.1以上的版本，考虑使用mysql_*的改良函数mysqli_*;<br />
32.试着喜欢使用三元运算符（？：）;<br />
33.在你想在彻底重做你的项目前，看看PEAR有没有你需要的。PEAR是个巨大的资源库，很多php开发者都知道;<br />
34.使用highlight_file()能自动打印一份很好格式化的页面源代码的副本;<br />
35.使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机，php.ini你不能修改，那么你最好添加error_reporting(0)函数，放在每个脚本文件的第一行（或用require_once()来加载）这能有效的保护敏感的SQL查询和路径在出错时不被显示;<br />
36.使用 gzcompress() 和gzuncompress()对容量大的字符串进行压缩（解压）在存进（取出）数据库时。这种内置的函数使用gzip算法能压缩到90%;<br />
37.通过参数变量地址得引用来使一个函数有多个返回值。你可以在变量前加个&ldquo;&amp;&rdquo;来表示按地址传递而非按值传递;<br />
38.Fully understand &ldquo;magic quotes&rdquo; and the dangers of SQL injection. I&rsquo;m hoping that most developers reading this are already familiar with SQL injection. However, I list it here because it&rsquo;s absolutely critical to understand. If you&rsquo;ve never heard the term before, spend the entire rest of the day googling and reading.<br />
39.使用strlen()因为要调用一些其他操作例如lowercase和hash表查询所以速度不是太好，我们可以用isset()来实现相似的功能，isset()速度优于strlen();<br />
40.When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don&rsquo;t go modifying your C or Java code thinking it&rsquo;ll suddenly become faster, it won&rsquo;t. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend&rsquo;s PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=222</link>
			<title><![CDATA[基于PHP和AJAX创建RSS聚合器]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Mon,31 May 2010 09:20:07 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=222</guid>
		<description><![CDATA[<p>　　本文所使用的是PHP语言，但是请记住任何服务器端语言都会正常工作。为了理解本文，我假定你基本理解Javascri&#112;t和PHP或一类似服务器端语言。<br />
　　想象使用一个简单HTML文件来把一个请求发送到一个服务器端脚本，收到一个基于该请求的定制XML文件，然后把它显示给用户而几乎不需要刷新浏览器！本文作者将同你一起探讨怎样在普通Web应用程序中联合PHP和AJAX技术来创建实时的数据传输而不需要进行浏览器刷新。<br />
　　有些读者可能会问，为什么你要创建在本地服务器上的馈送的一个副本而不是简单分析最原始的馈送。原因是，这样以来可以允许绕过XML HTTP Request对象所强加的跨域限制。后面，我还会解释怎样创建这个定制的PHP对象；但是首先，让我们从表单创建开始。<br />
　　本文示例使用AJAX来把一请求从一个RSS馈送发送到一定制的PHP对象。该PHP对象复制一份在本地服务器上的该馈送并返回这一路径。该请求对象收到这一路径，分析它，并且把数据以HTML形式显示给用户。这听起来涉及很多步骤，其实它仅由4个小文件组成。之所以使用了4个小文件，是为了平衡它们各自特定的力量而使整个系统的处理极富效率性。　　</p>
<p>　　创建发出请求的表单</p>
<p>　　你要做的第一事情是，在你的HTML的head标签之间包括你可能想使用的Javascri&#112;t和任何CSS文件。我包括了一个式样表来实现该聚合器的最后布局并用一个Javascri&#112;t文件来发出请求和进行馈送分析：<br />
&lt;link href=&quot;css/layout.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;<br />
&lt;script src=&quot;js/request.js&quot;&gt;&lt;/script&gt; <br />
　　下一步，创建一个表单，它针对你所选择的一个RSS馈送发出请求。我创建的表单只包括一个输入字段和一个提交该请求的按钮。该请求的查询是一个字符串，它由馈送输入值和一个将在服务器端被校验的口令字组成；作为一个示例，我使用了下面形式：<br />
&quot;password=mypassword</p>
<p>　　该代码在每次页面加载之时发出一次请求；因此，如果页面被刷新，现有的在该输入域中的馈送串将在页面加载时被请求。下面是一个表单数据的示例，连同一些div标签用来显示已分析的馈送的特定结点：<br />
&lt;body onload=&quot;javascri&#112;t:makeRequest('request.php?request=' + document.feedForm.feed.value + '&quot;password=mypassword');&quot;&gt;<br />
&lt;form name=&quot;feedForm&quot; method=&quot;post&quot; action=&quot;javascri&#112;t:makeRequest('request.php?request=' + document.feedForm.feed.value + '&quot;password=mypassword');&quot;&gt;<br />
Enter a feed: &lt;input type=&quot;text&quot; name=&quot;feed&quot; id=&quot;feed&quot; size=&quot;20&quot;&gt;<br />
　&lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Add Feed&quot;&gt;<br />
&lt;/form&gt;<br />
&lt;div id=&quot;logo&quot;&gt;&lt;/div&gt;<br />
&lt;hr/&gt;<br />
&lt;div id=&quot;copy&quot;&gt;&lt;/div&gt;<br />
&lt;div id=&quot;details&quot;&gt;&lt;/div&gt;<br />
&lt;/body&gt; <br />
　　我所创建的这三个div标签是logo，copy和details，其中每一个都在布局样式表中有一个与之相关联的样式。当我们分析馈送时将会用到它们，但是我们首先需要能够存取我们所请求的馈送。这可以使用我前面所提到的PHP对象来完成。</p>
<p>　　创建定制的PHP对象</p>
<p>　　我用PHP创建了一个小型RSS类，它在本地服务器上创建一个请求馈送的副本，这样它可以为我们稍后要创建的XML HTTP Request对象所存取。典型地，你不能跨域请求一个文件，这意味着你要请求的文件需要位于本地服务器上。这个类是一种解决跨域问题的办法，因为它创建该馈送的一个副本，这个副本在本地服务器上被请求并且把本地路径返回到该馈送，然后它由该Request对象来存取。</p>
<p>　　这个类中唯一的方法是一个请求方法，它仅有一个指向所请求的RSS 馈送的URL的参数。然后，它通过rss的名字来检查是否一目录位于本地服务器上。如果不存在，就创建一个并把其权限模式设置为0666，这意味着该目录可读写。当被设置为可读的时，该目录就可以在以后被存取；而当被设置为可写的时，就可以把该馈送的一个副本写向本地服务器上的目录：</p>
<p>//如果不存在目录就创建一个<br />
$dir = &quot;rss&quot;;<br />
if(!is_dir($dir))<br />
{<br />
　mkdir($dir， 0666);<br />
} <br />
　　注意</p>
<p>　　在一台Windows机器上，对于PHP 4.2.0及以上版本中模式设置是不被要求的。但是，如果它存在的话，它将被忽略；因此，我保留了它，以备该工程被迁移到一台UNIX或Linux服务器上。</p>
<p>　　在把馈送复制到该服务器前，我们需要一个唯一的文件名。我对这个完整的URL使用了md5加密方法以确保所有馈送的名字是唯一的。通过这个新的文件名，它可以连接一个描述指向该文件的目录的字符串；这将在创建该馈送的副本时使用：<br />
//创建唯一的命名<br />
$file=md5($rss_url);<br />
$path=&quot;$dir/$file.xml&quot;; <br />
　　通过使用被定义在上面的路径和到原始的被请求的馈送的URL的参考，现在我们能创建该文件的一个副本。最后，把该路径返回到该新文件，作为对该请求的响应：<br />
//复制馈送到本地服务器<br />
copy($rss_url，&quot;$path&quot;);<br />
return $path;<br />
Following is the small， yet powerful RSS class in its entirety:<br />
&lt;?php<br />
class RSS<br />
{<br />
　function get($rss_url)<br />
　{<br />
　　if($rss_url != &quot;&quot;)<br />
　　{<br />
　　　//如果不存在目录就创建一个<br />
　　　$dir = &quot;rss&quot;;<br />
　　　if(!is_dir($dir))<br />
　　　{<br />
　　　　mkdir($dir， 0666);<br />
　　　}<br />
　　　// 创建一个唯一的名字<br />
　　　$file = md5($rss_url);<br />
　　　$path = &quot;$dir/$file.xml&quot;;<br />
　　　//复制馈送到本地服务器<br />
　　　copy($rss_url， &quot;$path&quot;);<br />
　　　return $path;<br />
　　}<br />
　}<br />
}<br />
?&gt; <br />
　　为了存取该PHP类中的方法，需要有一个请求文件来担当到该类的一个接口，这也正是我们正在请求的文件。这个文件首先验证从该请求查询的一口令变量，或者返回一条指定该请求者不是一名经授权的用户的消息，或者用指向RSS馈送（该馈送在由请求方法处理后被复制到本地服务器）的路径作出响应。为了响应该RSS馈送，需要包含这个RSS对象并把它实例化，并且需要通过使用被请求的馈送的URL作为一参数来激活请求方法:<br />
&lt;?<br />
if($password == &quot;mypassword&quot;)<br />
{<br />
　require_once('classes/RSS.class.php');<br />
　$rss = new RSS();<br />
　echo $rss-&gt;get($request);<br />
}<br />
else<br />
{<br />
　echo &quot;You are an unauthorized user&quot;;<br />
}<br />
?&gt; <br />
　　GET/POST与AJAX相结合</p>
<p>　　为了POST请求，我们首先需要创建该请求对象。如果你没有创建请求对象的经验，那么可以读一下我的文章《How To Use AJAX》或简单地研究一下本文的示例源代码。一旦创建该请求对象，就可以调用sendFeed方法并传递由表单所创建的URL：<br />
function sendFeed(url){<br />
　post.onreadystatechange = sendRequest;<br />
　post.open(&quot;POST&quot;， url， true);<br />
　post.send(url);<br />
} <br />
　　一旦收到来自于PHP对象的响应并被正确加载，则对与该响应相应的本地文件发出另一个请求。在这种情况中，post.responseText提供给我们该新文件的路径：<br />
function sendRequest(){<br />
　if(checkReadyState(post)){<br />
　　request = createRequestObject();<br />
　　request.onreadystatechange = onResponse;<br />
　　request.open(&quot;GET&quot;， post.responseText， true);<br />
　　request.send(null);<br />
　}<br />
} <br />
　　分析响应</p>
<p>　　由于RSS馈送之间的区别，分析响应具有一定的挑战性。一些含有包含标题和描述结点的图像，而其它则没有。因此，当我们分析回馈时，我们需要做一点检查来译解它是否包括一图像。如果它包括一图像，我们就可以，与该馈送的标题和链接一起，在image div标签中显示该图像：<br />
var _logo = &quot;&quot;;<br />
var _title = response.getElementsByTagName('title')[0].firstChild.data;<br />
var _link = response.getElementsByTagName('link')[0].firstChild.data;;<br />
_logo += &quot;&lt;a href='&quot; + _link + &quot;' target='_blank'&gt;&quot; + _title + &quot;&lt;/a&gt;<br />
&quot;;<br />
if(checkForTag(response.getElementsByTagName('image')[0]))<br />
{<br />
　var _url = response.getElementsByTagName('url')[0].firstChild.data;<br />
　_logo += &quot;&lt;img src='&quot; + _url + &quot;' border='0'&gt;<br />
&quot;<br />
}<br />
document.getElementById('logo').innerHTML = _logo; <br />
　　我们不仅必须检查每个图像以显示它，当遍历馈送中所有的项时我们还需要对之进行检查。因为如果存在一个图像，那么所有另外的标题和链接结点索引都将无法正常工作。因此，当发现图像标签时，我们应该通过在每一次遍历中增加索引值（+1）来调整标题和链接结点的索引：<br />
if(checkForTag(response.getElementsByTagName('image')[0]) &quot;&quot; i&gt;0){<br />
　var _title=response.getElementsByTagName('title')[i+1].firstChild.data;<br />
　var _link=response.getElementsByTagName('link')[i+1].firstChild.data;<br />
}<br />
else{<br />
　var _title =response.getElementsByTagName('title')[i].firstChild.data;<br />
　var _link = response.getElementsByTagName('link')[i].firstChild.data;<br />
}<br />
　　你可以使用checkForTag方法来检查是否存在特定的标签：<br />
function checkForTag(tag){<br />
　if(tag != undefined) {<br />
　　return true;<br />
　}<br />
　else{<br />
　　return false;<br />
　}<br />
} <br />
　　存在许多种进行馈送分析的可能性。例如，你可以把项赋到类别上并使得该类别可折迭，这样用户就可以对其想观看的内容进行选择。作为一个示例，我使用日期来对项进行分类-这可以通过译解是否针对一个特定项的pubDate不同于前一个项的pubDate并且相应地显示一新的日期来实现：<br />
if(i&gt;1){<br />
　var previousPubDate = response.getElementsByTagName('pubDate')[i-1].firstChild.data;<br />
}<br />
if(pubDate != previousPubDate || previousPubDate == undefined){<br />
　_copy += &quot;&lt;div id='detail'&gt;&quot; + pubDate + &quot;&lt;/div&gt;&lt;hr align='left' width='90%'/&gt;&quot;;<br />
}<br />
_copy += &quot;&lt;a href=\&quot;javascri&#112;t:showDetails('&quot; + i + &quot;');\&quot;&gt;&quot; + _title + &quot;&lt;/a&gt;</p>
<p>&quot;;<br />
document.getElementById('copy').innerHTML += _copy; <br />
　　注意，上面的最后一部分是showDetails方法，它用于当一用户从一个馈送中选择一特定的项时进行细节显示。这个方法有一个参数（项索引值），这个索引用于发现在该馈送中details结点的索引：<br />
function showDetails(index){<br />
　document.getElementById('details').innerHTML = response.getElementsByTagName('description')[index].firstChild.data;<br />
} <br />
　　结论</p>
<p>　　使用AJAX发送查询字符串到一个服务器端脚本并检索一个基于该串的定制响应，这对于任何web开发者都有实现的可能。这样以来，你的下一个web应用程序也将会充满了新的可能性。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=208</link>
			<title><![CDATA[如何正确配置PHP开发环境]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Wed,12 May 2010 18:37:25 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=208</guid>
		<description><![CDATA[<p>PHP语言在进行开发之前，需要将开发环境配置妥当，这样才能实现我们的程序完美运行。那么，如何正确的配置PHP开发环境呢？文章将介绍Apache、MySql、PHP的下载、安装及配置，分别讲述在windows和Linux环境下开发环境的搭建。<br />
　　　　一、下载Apache、MySql和PHP<br />
　　　　1、Apache的下载<br />
　　　　Apache服务器可以通过官方提供的镜像地址来下载windows的Apache安装程序，不过都是英文版的，而且下载速度太慢。我建议大家去华军、天空或者中关村下载最新版的安装程序，速度很快。<br />
　　　　2、MySQL的下载<br />
　　　　MySQL的官方网站是<a href="http://www.mysql.com/">http://www.mysql.com</a>。可以下载最新版本的MySQL，还是那句话，建议大家去华军、天空或者中关村下载。<br />
　　　　3、PHP的下载<br />
　　　　PHP的官方网站是<a href="http://www.php.net/">http://www.php.net</a>。可以下载最新的版本。<br />
　　　　二、在windows下配置PHP开发环境<br />
　　　　1、Apache、MySql和PHP的安装像安装windows其他软件一样，这里建议把Apache和PHP软件安装在D盘目录下，把MySQL软件安装在C盘，这样不需要做任何设置，MySQL就可以顺利启动运行。<br />
　　　　2、配置开发环境<br />
　　　　为了让windows可以执行PHP，需要做进一步的工作，按以下步骤搭建好环境：<br />
　　　　1）在PHP安装目录下，找到文件php5ts.dll，将其复制到C盘system32目录下。<br />
　　　　2）在PHP安装目录下，找到文件libmysql.dll，将其复制到C盘system32目录下。<br />
　　　　3）在PHP安装目录下，找到文件php.ini，将其复制到C:/windows下。这个文件是配置PHP的基本文件，如设置服务器根目录配置，用文本编辑器打开php.ini文件，找到&quot;doc_root=&quot;，因为我把Apache默认安装在D盘根目录下，所以，修改这个配置项的值为：doc_root=d:/apache2/htdocs<br />
　　　　提示：用户根据自己安装Apache的路径，修改该配置项的值。<br />
　　　　4）在php.ini中找到&ldquo;extension_dir =&quot;./&quot;&rdquo;，这个配置项用来载入PHP的扩展模块，修改该配置项如下：extension_dir = d:/php/ext，（需要按自己的安装目录修改PHP的载入位置）。<br />
　　　　5）在php.ini中找到&ldquo;;extension=php_mysql.dll&rdquo;，把这项前面的分号去掉，表示使这个项生效。这个配置项用来使PHP支持MySQL，这里分号起注释作用。修改完PHP的配置文件php.ini后，保存退出该文件。<br />
　　　　6）进行Apache的配置。转到Apache的安装目录下的conf目录，用文本编辑器打开Apache的配置文件http.conf。在此文件中找到 dynamic shared object(DOS) Support，在LoadModule行的最后添加如下配置项：LoadModule php5_module d:/php/php5apache2.dll，（需要按自己的安装目录修改PHP的载入位置）。该项是通过Apache来载入PHP模块 php5apache2.dll，即PHP以Apache的一个模块来运行。<br />
　　　　7）为了让Apache支持.php后缀的文件，在http.conf中找到AddType项，在最后添加如下配置项：AddType application/x-httpd-php.php。找到directoryIndex，在最后添加index.php。为了支持中文，找到 AddDefaultCharset ISO-8859-1改为AddDefaultCharset GB2312。修改完后保存http.conf。即完成Apache的基本配置。<br />
　　　　注意：强烈建议对Apache配置文件http.conf进行修改时，一定遵守修改一点测试一点的原则，即每次修改完一项并保存 http.conf后，要重启一下Apache，如果Apache正常启动，则可以进行后续修改，否则，说明本次修改有误，仔细检查并重新修改。(www.3lian.com)<br />
　　　　三、在Linux下配置配置PHP开发环境<br />
　　　　1、MySQL的安装<br />
　　　　在MySQL官网下载MySQL的安装文件MySQL-server-4.0.20-0.i386.rpm，执行下面的命令完成MySQL的安装。<br />
　　　　rpm -ivh MySQL-server-4.0.20-0.i386.rpm<br />
　　　　在没有设置MySQL密码的情况下，通过以下命令测试MySQL是否安装成功。<br />
　　　　mysql -u root<br />
　　　　出现类似welcome to the mysql mointor. commands end with;or /g的字样，说明安装成功。<br />
　　　　2、Apache的安装<br />
　　　　从Apache的官网下载UNIX版本的压缩包，以httpd-2.0.52.tar.gz为例，假设资源包放在/usr/local/src下，进入这个目录后解压缩，命令如下：<br />
　　　　cd /usr/local/src<br />
　　　　tar -zxvf httpd-2.0.52.tar.gz<br />
　　　　解压缩后，进入目录httpd-2.0.52，执行以下命令：<br />
　　　　./configure --prefix=/usr/local/apache2 --enable--module=so<br />
　　　　其中--prefix=/usr/local/apache2用来指定Apache的安装目录。接下来进行编译，执行一下命令完成安装。<br />
　　　　make<br />
　　　　mae install<br />
　　　　3、配置PHP开发环境的安装<br />
　　　　1）从PHP官网下载php5.1.4.tar.gz的压缩包，解压缩该文件包，命令如下：<br />
　　　　tar -zxf php5.1.4.tar.gz<br />
　　　　2）转到解压缩后的目录，执行以下命令完成PHP安装目录等相关配置：<br />
　　　　./configure --prefix=/usr/local/php -with-mysql=/var/lib/mysql<br />
　　　　3）接着编译PHP，命令如下：<br />
　　　　make<br />
　　　　make install<br />
　　　　4）复制当前目录下的文件PHP大安装目录的lib目录下，并改名为php.ini，命令如下：<br />
　　　　cp php.ini-dist /usr/local/php/lib/php.ini<br />
　　　　5）以上配置PHP开发环境的安装完后，参见windows下配置的内容进行相关配置，配置项和配置方法类似<br />
&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=207</link>
			<title><![CDATA[PHP正则表达式的使用技巧]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Wed,12 May 2010 18:34:19 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=207</guid>
		<description><![CDATA[<p>PHP正则表达式的定义：</p>
<p>用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。</p>
<p>PHP中的正则函数：</p>
<p>PHP中有两套正则函数，两者功能差不多，分别为：</p>
<p>一套是由PCRE（Perl Compatible Regular Expression）库提供的。使用&ldquo;preg_&rdquo;为前缀命名的函数；</p>
<p>一套由POSIX（Portable Operating System Interface of Unix ）扩展提供的。使用以&ldquo;ereg_&rdquo;为前缀命名的函数；（POSIX的正则函数库，自PHP 5.3以后，就不在推荐使用，从PHP6以后，就将被移除）</p>
<p>由于POSIX正则即将推出历史舞台，并且PCRE和perl的形式差不多，更利于我们在perl和php之间切换，所以这里重点介绍PCRE正则的使用。</p>
<p>PCRE正则表达式</p>
<p>PCRE全称为Perl Compatible Regular Expression，意思是Perl兼容正则表达式。</p>
<p>在PCRE中，通常将模式表达式（即正则表达式）包含在两个反斜线&ldquo;/&rdquo;之间，如&ldquo;/apple/&rdquo;。</p>
<p>正则中重要的几个概念有：元字符、转义、模式单元（重复）、反义、引用和断言，这些概念都可以在文章[1]中轻松的理解和掌握。</p>
<p>常用的元字符(Meta-character)：</p>
<p>元字符&nbsp;&nbsp;&nbsp;&nbsp; 说明</p>
<p>/A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配字符串串首的原子</p>
<p>/Z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配字符串串尾的原子</p>
<p>/b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配单词的边界&nbsp;&nbsp;&nbsp;&nbsp; //bis/&nbsp;&nbsp; 匹配头为is的字符串&nbsp;&nbsp; /is/b/&nbsp;&nbsp; 匹配尾为is的字符串&nbsp;&nbsp; //bis/b/ 定界</p>
<p>/B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配除单词边界之外的任意字符&nbsp;&nbsp; //Bis/&nbsp;&nbsp; 匹配单词&ldquo;This&rdquo;中的&ldquo;is&rdquo;</p>
<p>/d&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个数字；等价于[0-9]</p>
<p>/D&nbsp;&nbsp;&nbsp;&nbsp; 匹配除数字以外任何一个字符；等价于[^0-9]</p>
<p>/w&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个英文字母、数字或下划线；等价于[0-9a-zA-Z_]</p>
<p>/W&nbsp;&nbsp;&nbsp;&nbsp; 匹配除英文字母、数字和下划线以外任何一个字符；等价于[^0-9a-zA-Z_]</p>
<p>/s&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个空白字符；等价于[/f/t/v]</p>
<p>/S&nbsp;&nbsp;&nbsp;&nbsp; 匹配除空白字符以外任何一个字符；等价于[^/f/t/v]</p>
<p>/f&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个换页符等价于 /x0c 或 /cL</p>
<p>匹配一个换行符；等价于 /x0a 或 /cJ</p>
<p>匹配一个回车符等价于/x0d 或 /cM</p>
<p>/t&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个制表符；等价于 /x09/或/cl</p>
<p>/v&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个垂直制表符；等价于/x0b或/ck</p>
<p>/oNN&nbsp;&nbsp; 匹配一个八进制数字</p>
<p>/xNN&nbsp;&nbsp; 匹配一个十六进制数字</p>
<p>/cC&nbsp;&nbsp;&nbsp; 匹配一个控制字符</p>
<p>模式修正符（Pattern Modifiers）：</p>
<p>模式修正符在忽略大小写、匹配多行中使用特别多，掌握了这一个修正符，往往能解决我们遇到的很多问题。</p>
<p>i&nbsp;&nbsp;&nbsp;&nbsp; －可同时匹配大小写字母</p>
<p>M&nbsp;&nbsp;&nbsp;&nbsp; －将字符串视为多行</p>
<p>S&nbsp;&nbsp;&nbsp;&nbsp; －将字符串视为单行，换行符做普通字符看待，使&ldquo;.&rdquo;匹配任何字符</p>
<p>X&nbsp;&nbsp;&nbsp;&nbsp; －模式中的空白忽略不计&nbsp;&nbsp;</p>
<p>U&nbsp;&nbsp;&nbsp;&nbsp; －匹配到最近的字符串</p>
<p>e&nbsp;&nbsp;&nbsp;&nbsp; －将替换的字符串作为表达使用</p>
<p>格式：/apple/i匹配&ldquo;apple&rdquo;或&ldquo;Apple&rdquo;等，忽略大小写。&nbsp;&nbsp;&nbsp;&nbsp; /i</p>
<p>PCRE的模式单元：</p>
<p>//1 提取第一位的属性</p>
<p>/^/d{2} ([/W])/d{2}//1/d{4}$匹配&ldquo;12-31-2006&rdquo;、&ldquo;09/27/1996&rdquo;、&ldquo;86 01 4321&rdquo;等字符串。但上述正则表达式不匹配&ldquo;12/34-5678&rdquo;的格式。这是因为模式&ldquo;[/W]&rdquo;的结果&ldquo;/&rdquo;已经被存储。下个位置&ldquo;/1&rdquo;引用时，其匹配模式也是字符&ldquo;/&rdquo;。</p>
<p>当不需要存储匹配结果时使用非存储模式单元&ldquo;（？：）&rdquo;</p>
<p>例如/(?:a|b|c)(D|E|F)//1g/ 将匹配&ldquo;aEEg&rdquo;。在一些正则表达式中，使用非存储模式单元是必要的。否则，需要改变其后引用的顺序。上例还可以写成/（a|b|c）(C|E|F)/2g/。</p>
<p>PCRE正则表达式函数：</p>
<p>以下为引用的内容：</p>
<p>preg_match()和preg_match_all()&nbsp;&nbsp; <br />
preg_quote()&nbsp;&nbsp; <br />
preg_split()&nbsp;&nbsp; <br />
preg_grep()&nbsp;&nbsp; <br />
preg_replace() <br />
&nbsp;</p>
<p><br />
函数的具体使用，我们可以通过PHP手册来找到，下面分享一些平时积累的正则表达式：</p>
<p>匹配action属性</p>
<p>以下为引用的内容：</p>
<p>$str = '';&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; $match = '';&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; preg_match_all('//s+action=/&quot;(?!http:)(.*?)/&quot;/s/', $str, $match);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; print_r($match);&nbsp; <br />
&nbsp;</p>
<p><br />
在正则中使用回调函数</p>
<p>以下为引用的内容：</p>
<p>/**&nbsp;&nbsp; <br />
&nbsp;&nbsp; * replace some string by callback function&nbsp;&nbsp; <br />
&nbsp;&nbsp; *&nbsp;&nbsp; <br />
&nbsp;&nbsp; */&nbsp; <br />
&nbsp; function callback_replace() {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $url = 'http://esfang.house.sina.com.cn';&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $str = '';&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $str = preg_replace ( '/(?&lt;=/saction=/&quot;)(?!http:)(.*?)(?=/&quot;/s)/e', 'search(/$url, //1)', $str );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $str;&nbsp;&nbsp; <br />
&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; function search($url, $match){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $url . '/' . $match;&nbsp;&nbsp; <br />
&nbsp; }&nbsp; <br />
&nbsp;</p>
<p><br />
带断言的正则匹配</p>
<p>以下为引用的内容：</p>
<p>$match = '';&nbsp;&nbsp; <br />
&nbsp;&nbsp; $str = 'xxxxxx.com.cn bold font&nbsp; <br />
paragraph text</p>
<p>';&nbsp;&nbsp; <br />
&nbsp;&nbsp; preg_match_all ( '/(?&lt;=&lt;(/w{1})&gt;).*(?=&lt;///1&gt;)/', $str, $match );&nbsp;&nbsp; <br />
&nbsp;&nbsp; echo &quot;匹配没有属性的HTML标签中的内容：&quot;;&nbsp;&nbsp; <br />
&nbsp;&nbsp; print_r ( $match );&nbsp; <br />
&nbsp;</p>
<p><br />
替换HTML源码中的地址</p>
<p>以下为引用的内容：</p>
<p>$form_html = preg_replace ( '/(?&lt;=/saction=/&quot;|/ssrc=/&quot;|/shref=/&quot;)(?!http:|javascri&#112;t)(.*?)(?=/&quot;/s)/e', 'add_url(/$url, /'//1/')', $form_html );&nbsp; <br />
&nbsp;</p>
<p><br />
最后，正则工具虽然强大，但是从效率和编写时间上来讲，有的时候可能没有explode来的更直接，对于一些紧急或者要求不高的任务，简单、粗暴的方法也许更好。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=201</link>
			<title><![CDATA[PHP类的继承]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Thu,06 May 2010 20:45:11 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=201</guid>
		<description><![CDATA[<p>上一篇我们讲到了 <a target="_blank" href="http://www.wtwlb.com/article.asp?id=197">PHP类的实例化与访问</a>，呵呵&nbsp;下面<a href="http://www.wtwlb.com/" target="_blank">小隐</a>继续为你将下一篇内容 类的继承，好下面直接切入话题。<br />
在PHP中，可以通过继承其他类的方法，来调用这些类里已经定义好的方法和属性，但是允许继续一个类。被继承的类称为父类或基类，继承类称为子类。要继承其他类，可以使用 extends 关键字来实现。下面演示继承类的方法</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li><span class="comment">//汽车类 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">class</span><span>&nbsp;car{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//定义轮子的个数 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;</span><span class="vars">$badWheels</span><span>=1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//设置轮子的个数的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span>&nbsp;setWheels(</span><span class="vars">$wheels</span><span>){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;badWheels=</span><span class="vars">$wheels</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//读取轮子个数的方法 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span>&nbsp;getWheels(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;badWheels; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="comment">//车手类继承了汽车的方法 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">class</span><span>&nbsp;user&nbsp;</span><span class="keyword">extends</span><span>&nbsp;car{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//定义档位和速度 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="vars">$speed</span><span>=</span><span class="keyword">array</span><span>(1=&gt;50,2=&gt;100,3=&gt;260,4=&gt;300); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//定义当前的车手属性 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="vars">$user</span><span>=</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//定义当前车子的状态 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="vars">$run</span><span>=true; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//取得当前车速 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span>&nbsp;getSpeed(</span><span class="vars">$level</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;speed[</span><span class="vars">$level</span><span>]; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//设置当前车手 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span>&nbsp;setUser(</span><span class="vars">$user</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;user=</span><span class="vars">$user</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//取得当前车手 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span>&nbsp;getUser(){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;user; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//实例化&nbsp;车手类 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$driver</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;user(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//使用车手类里的方法和属性 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$driver</span><span>-&gt;setUser(</span><span class="string">&quot;Tom&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;</span><span class="string">&quot;当前的车手是&quot;</span><span>.</span><span class="vars">$driver</span><span>-&gt;getUser().</span><span class="string">&quot;&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">if</span><span>(</span><span class="vars">$driver</span><span>-&gt;run){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="string">&quot;车子已经启动&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="string">&quot;车子正在准备&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="func">echo</span><span>&nbsp;</span><span class="string">&quot;当前的车速是&quot;</span><span>.</span><span class="vars">$driver</span><span>-&gt;getSpeed(2).</span><span class="string">&quot;&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//使用基类里面的方法和属性 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">if</span><span>(</span><span class="vars">$driver</span><span>-&gt;badWheels&gt;0){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="vars">$driver</span><span>-&gt;getUser().</span><span class="string">&quot;的车有&quot;</span><span>.</span><span class="vars">$driver</span><span>-&gt;getWheels().</span><span class="string">&quot;个轮胎坏掉了.&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//使用基类里面的setWheels方法 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$driver</span><span>-&gt;setWheels(0); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;</span><span class="string">&quot;修理工正在修复轮胎&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">if</span><span>(</span><span class="vars">$driver</span><span>-&gt;badWheels&gt;0){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="vars">$driver</span><span>-&gt;getUser().</span><span class="string">&quot;的车有&quot;</span><span>.</span><span class="vars">$driver</span><span>-&gt;getWheels().</span><span class="string">&quot;个轮胎坏掉了.&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="func">echo</span><span>&nbsp;</span><span class="vars">$driver</span><span>-&gt;getUser().</span><span class="string">&quot;的车重新进入赛道&lt;br/&gt;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>预览的效果如下乳所示：<br />
&nbsp;</p>
<p><img alt="" src="http://www.wtwlb.com/download.asp?id=11" /></p>
<p>上一篇文章地址：<a href="http://www.wtwlb.com/article.asp?id=197">http://www.wtwlb.com/article.asp?id=197</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
下一篇 小隐 将会为你讲述 子类访问基类的方法&nbsp; 如果您有任何意见欢迎提出 <br />
联系方法： QQ:532898411 Email :web@wtwlb.com</p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=197</link>
			<title><![CDATA[PHP类的实例化与访问]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Tue,04 May 2010 18:44:22 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=197</guid>
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;上一篇我们将到了<a target="_blank" href="http://www.wtwlb.com/article.asp?id=193">类的实现与应用</a>，呵呵&nbsp;下面<a target="_blank" href="http://www.wtwlb.com">小隐</a>继续为你将下一篇内容 类的实例化与访问&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类的定义完成后，都是存在于文件中的，只有把其转化成为对象后，才能在内存中存在，供程序使用，类转化为对象的过程叫做实例化。类的实例化是使用 new 关键字 。下面演示如何实例化一个类，并访问其属性和方法。<br />
&nbsp;</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">class</span><span>&nbsp;car{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//定义使用者 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="vars">$user</span><span>=</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//定义车速 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="vars">$speed</span><span>&nbsp;=</span><span class="keyword">array</span><span>(1=&gt;50,2=&gt;100,3=&gt;260,4=&gt;300); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//返回车辆现在的速度&nbsp;</span><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;getspeed(</span><span class="vars">$level</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;speed[</span><span class="vars">$level</span><span>]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="comment">//设置驾驶员 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;setUser(</span><span class="vars">$user</span><span>){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$this</span><span>-&gt;user=</span><span class="vars">$user</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="comment">//取得驾驶员 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;getUser(){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;user; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="comment">//实例化类 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$newCar</span><span>=</span><span class="keyword">new</span><span>&nbsp;car(); &nbsp;&nbsp;</span></li>
    <li><span class="comment">//直接使用类的属性 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;</span><span class="vars">$newCar</span><span>-&gt;user; &nbsp;&nbsp;</span></li>
    <li><span class="comment">//使用类的方法 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$newCar</span><span>-&gt;setUser(</span><span class="string">&quot;Tom&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li><span class="comment">//使用方法返回的属性 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;</span><span class="string">&quot;现在的驾驶员是&quot;</span><span>.</span><span class="vars">$newCar</span><span>-&gt;getUser().</span><span class="string">&quot;,他现在的车速是&quot;</span><span>.</span><span class="vars">$newCar</span><span>-&gt;getspeed(2).</span><span class="string">&quot;.&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>结果如下图所示：</p>
<p><img alt="" src="http://www.wtwlb.com/download.asp?id=10" /></p>
<p>上一篇文章地址：&nbsp; <a href="http://www.wtwlb.com/article.asp?id=193">http://www.wtwlb.com/article.asp?id=193</a>&nbsp;&nbsp; <br />
<br />
下一篇文章地址：<a href="http://www.wtwlb.com/article.asp?id=201">http://www.wtwlb.com/article.asp?id=201</a></p>]]></description>
		</item>
		
			<item>
			<link>http://www.wtwlb.com/article.asp?id=193</link>
			<title><![CDATA[PHP 类的实现与应用]]></title>
			<author>ningjian198906@163.com(nj)</author>
			<category><![CDATA[php专版]]></category>
			<pubDate>Mon,03 May 2010 15:37:47 +0800</pubDate>
			<guid>http://www.wtwlb.com/default.asp?id=193</guid>
		<description><![CDATA[<p>&nbsp; 呵呵为了使得大家更好的学习php，<a target="_blank" href="http://www.wtwlb.com">小隐</a>特意收集了有关类的资料，并把我做的例子与大家分享一下。如果说函数是有效PHP代码的集合，那么类就是变量与函数的集合，而对象就是类的实例化。在面向过程的编程方法中，函数得到了广泛的应用。而随着今年来面向对象编程方法逐渐成熟，PHP也引进了先进的对象模式，来完善对对象处理，提高php处理对象的性能，为php使用面向对象编程方法打下了基础</p>
<p>类的创建</p>
<p>类是由变量和函数组成的，在类里面，变量称为属性（也可以称为成员变量），函数称为方法。<br />
演示类的方法的代码如下显示：(提示：如果代码没有显示，请您耐心等待，或刷心页面)<br />
&nbsp;</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span class="comment">//使用class关键字定义类&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">class</span><span>&nbsp;car{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="comment">//使用var关键字定义属性&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">var</span><span>&nbsp;</span><span class="vars">$wheel</span><span>=0;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="comment">//使用public&nbsp;定义一个全局属性&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="vars">$run</span><span>=false;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="comment">//定义一个方法，设置类的属性&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;setwheel{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;wheel=4;&nbsp;</span><span class="comment">//在类的方法中，使用$this&nbsp;访问类的属性&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="comment">//定义一个方法，返回类的属性&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;getwheel(){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>-&gt;wheel;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;定义一个类，使用class 关键字开头，后面跟类名，类的命名规则应符合php标签的命名规则，并且不能是PHP的保留字。类名后面跟着一对花括号，花括号内包括类的属性和方法。在类的方法中，可以使用$this关键字来访问类的属性，实际上$this就是一种引用。</p>
<p>好 这次就写这么多，下章 我们讲 类的实例化与访问。学习的过程中如果您有任何问题 欢迎与我取得联系。联系方式： QQ:532898411&nbsp; Email: <a href="http://www.wtwlb.com/mailto:ningjian198906@163.com">ningjian198906@163.com</a>&nbsp; <a href="http://www.wtwlb.com/mailto:web@wtwlb.com">web@wtwlb.com</a></p>]]></description>
		</item>
		
</channel>
</rss>
