口水文章,文章里有的地方还没写完整.大家跟我一起将就的看看吧..
目前php的最新版本已经是5.41
=========================================================
php一直是在web开发领域中十分重要而快捷方便的开发语言,深受广大开发人员的青睐。现在php 5.4的正式版本已经发布,其中增加了大量新的特性,官方声称性能提高20%,并且占用更少的资源。在本文中,我将带领大家学习php 5.4的一些新的特性。
在php 5.4中,首先是修复了多达100多处的bug,并且在内存及性能优化上做的更好了,而且去掉了一些之前版本的方法,比如register_globals,magic_quotes,safe_mode等,而且要注意的是,php 5.4中,默认的编码方式已经改变为了,这很有利于开发者开发多语言的版本应用。
traits介绍
首先来介绍下php 5.4中新加入的功能traits。其实该功能在其他语言中也见到其踪影,这里可以简单理解为一系列的方法的集合,在组织结构上跟类有点象(但不能象类那样实例化),能让开发者可以在不同的类中重用这组方法。由于php是单继承的语言,所以一个类中是不能同时继承多个类的。这个时候,traits就派上用场了。
traits是一个方案集合,它不属于任何实际类。用户没法创建trait实例或直接调用trait中的方法,相反,用户必须将traits合并到实际的类当中方能使用它们。在优先级方面,trait方法会覆盖继承而来的同名方法,而当前合并类中的同名方法则会覆盖trait方法。
下面举个例子来说明traits的用途。假设我们正在构建的网站中,需要同时调用facebook和twitter的api,而在这两个api的调用过程中,都需要调用curl方法进行一系列的操作,获得两者api接口返回的内容,为了不在这两个类中重复编写相同的方法,可以使用php 5.4中的traits实现,如下代码所示:
/** curl wrapper trait */
trait curl
public function curl($url)
$ch = curl_init();
curl_setopt($ch, curlopt_url, $url);
curl_setopt($ch, curlopt_returntransfer, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
/** twitter api 类 */
class twitter_api
use curl; //调用traits
public function get($url)
return json_decode($this->curl(http://api.twitter.com/.$url));
/** facebook api 类 */
class facebook_api
use curl; //调用traits
public function get($url)
return json_decode($this->curl(http://graph.facebook.com/.$url));
$facebook = new facebook_api();
echo $facebook->get(name; //这里会调用api输出该facebook的用户名
/** 演示php 5.4中的新特性 */
echo (new facebook_api)->get(name;
$foo = get;
echo (new facebook_api)->$foo(name;
echo (new twitter_api)->get(name;
在上面的代码中,首先通过关键字trait定义了一个功能集合,其名称为curl,其中包含一个方法名为curl,该方法中是根据url的参数值,调用php内置的cur方法返回该url对应的页面输出内容。然后在twitter_api类和facebook_api
类中,分别使用use curl去调用了这个traits,并且在各自的get方法中,都调用了traits中的的curl方法。
注意在上面的代码中,我们除了用new facebook_api()来生成facebook对象的实例外,还演示了使用php 5.4中新的特性,即:
可以在实例化时访问类成员,即:
echo (new facebook_api)->get(name;
$foo = get;
echo (new facebook_api)->$foo(name;
看到了么?其中对$foo变量赋值为get,然后在类中企图调用get方法时,是通过(new facebook_api)->$foo(500058753)->name;去实现调用的。
我们再举个例子来说明下traits的使用,可能这个例子更加简单,比如如下代码:
trait net
public function net()
return net;
trait tuts
public function tuts()
return tuts;
class nettuts
use net, tuts;
public function plus()
return +;
$o = new nettuts;
echo $o->net(), $o->tuts(), $o->plus();
echo (new nettuts)->net(), (new nettuts)->tuts(), (new nettuts)->plus();
以上的结果都输出nettuts。此外,顺便说下,在php 5.4中traits的魔术常量为__trait__。
内置的调试服务器
在以往的php 开发中,一般是需要跟如apache http server进行配合开发的。在php 5.4中,新内置了一个简单的web服务器,以方便开发者不用通过复杂的配置也可以完成开发工作。下面分步骤讲解下如何在windows环境下,使用php 5.4中的内置服务器完成相关工作。
步骤1) 首先在c盘根目录下建立一个目录,为public_html,并且在文件中建立一个router.php文件,代码如下:
php
// router.php
if (preg_match(#\.php$#, $_server[request_uri]))
require basename($_server[request_uri]); // serve php file
else if (strpos($_server[request_uri], .) !== false)
return false; // serve file as-is
>
然后再建立一个简单的php文件,名字为index.php,如下:
// index.php
echo hello nettuts+ readers!;
