仓酷云
标题:
PHP编程:PHP 5.4正式版主要新特征
[打印本页]
作者:
深爱那片海
时间:
2015-2-3 23:32
标题:
PHP编程:PHP 5.4正式版主要新特征
给你的建议是,有些最常用的语句是需要记住的 比如if for while这些、其他的一般语句你只要知道有这个函数或者有这个功能就可以了,当你用的时候你可以凭借记忆搜索就可以了。 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!";
>
然后翻开php 5.4的装置目次,找到php.ini,然后在include_path中到场以下这行:
include_path = ".;C:\php\PEAR;C:\public_html"
步调2 运转内置的web办事器
起首停止号令行形式下,而且进入php目次,输出以下号令:
php -S 0.0.0.0:8080 -t C:\public_html router.php
个中这里指定了任何机械都可以会见这台办事器,而且指定了8080端口,指定了任务监听的路由文件为c:\public_html下的router,php文件,在下面的号令行输出后按回车,会呈现以下信息提醒
则证实内置的办事器已准确启动了。
这个时分,可以在阅读器中输出http://localhost:8080/index.php停止会见了。
更简约的数组语法
在php 5.4中,对一些语法上的撑持加倍显得简约,好比数组中的声明,如今
撑持利用中括号的办法来声明,以下:
$fruits = array("apples", "oranges", "bananas"); // 旧的声明体例
$fruits = ["apples", "oranges", "bananas"]; //php 5.4中新的撑持声明体例
// 新的联系关系数组会见
$array = [
"foo" => "bar",
"bar" => "foo"
];
固然,在php 5.4中,一样撑持旧的数组声明体例。
直接对函数前往值停止数组取值
在php 5.4中,撑持直接对函数前往值停止数组取值。看个例子,好比:
$tmp = explode(" ", "Alan Mathison Turing");
echo $tmp[1]; // Mathison
在这个例子中,假如是php 5.4之前,要掏出下面的字符串中的Mathison的话,必需先用explode函数先前往相干的值,然后再对数组停止取值。而在php 5.4中,可以直接对前往值停止数组停止取值,以下:
echo explode(" ", "Alan Mathison Turing")[1];
如许就便利多了。再好比,到场要取得下面这个字符串的最初一个字符串局部Turing,在php 5.4中可以如许做:
echo end(explode(" ", "Alan Mathison Turing"));
再给出一个庞杂点的例子,以下:
function foobar()
return ["foo" => ["bar" => "Hello"]];
echo foobar()["foo"]["bar"]; //输入 Hello
闭包中能利用$this指针
之前的php 版本中,是不克不及在匿名办法中(也称为闭包)利用$this指针的,而php 5.4中是可以了,例子以下:
class Foo
function hello() {
echo "Hello Nettuts!";
function anonymous()
return function() {
$this->hello(); //这在之前的版本中是不克不及完成
};
class Bar
function __construct(Foo $o)
$x = $o->anonymous(); // 实践上挪用Foo::hello()
$x(); // 履行的是 Foo::hello()
new Bar(new Foo); //输入 Hello Nettuts!
以上的完成办法有点庞杂,在php 5.4中,可以更便利写为以下:
function anonymous()
$that = $this;
return function() use ($that) {
$that->hello();
};
如今,不论php.ini中的short_tag标志若何设置,在模板中可以随时利用如许的体例了,从而取代 如许的体例。采取“0b”前缀标识二进制数,如今,假如要利用二进制数,请在后面加上0b的前缀,好比:
echo 0b11111
函数类型提醒的加强
因为php是弱类型的言语,因而在php 5.0后,引入了函数类型提醒的功效,其寄义为关于传入函数中的参数都停止类型反省,举个例子,有以下的类:
class bar {
function foo(bar $foo) {
个中函数foo中的参数划定了传入的参数必需为bar类的实例,不然体系会判别失足。一样关于数组来讲,也能够停止判别,好比:
function foo(array $foo) {
foo(array(1, 2, 3)); // 准确,由于传入的是数组
foo(123); // 不准确,传入的不是数组
而在php 5.4中,则撑持对callable类型的撑持。在之前, 咱们假如但愿一个函数承受一个回调函数作为参数, 那需求做良多额定的任务来反省是不是是可挪用的准确的回调函数,例子以下:
function foo(callable $callback) {
则:
foo("false"); //毛病,由于false不是callable类型
foo("printf"); //准确
foo(function(){}); //准确
class A {
static function show() {
foo(array("A", "show")); //准确
遗憾的是,PHP 5.4中,仍然不撑持对根基类型如字符,整形等的类型提醒。
对工夫统计的加强
在PHP 5.4中,个中新增添了$_SERVER["REQUEST_TIME_FLOAT"],这个是用来统计办事恳求工夫的,并用ms来暗示,大小气便了开辟者,好比:
echo "剧本履行工夫 ", round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 2), "s";
总结:
本文复杂小结了PHP 5.4中的一些新的特征,可以看到PHP 5.4中对照分明的特征改善次要是Traits和内置调试办事器,默许撑持等,具体的新特征引见请参考PHP 5.4的用户手册
大家如果能懂得“熟能生巧”的道理也就明白了这并不是浪费时间,同时这也可以减轻板主的负担,让他们有时间去处理更难的问题。
作者:
简单生活
时间:
2015-2-12 00:19
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者:
愤怒的大鸟
时间:
2015-2-27 05:07
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者:
因胸联盟
时间:
2015-3-8 21:17
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者:
小妖女
时间:
2015-3-11 19:17
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者:
冷月葬花魂
时间:
2015-3-19 08:53
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者:
小魔女
时间:
2015-3-27 15:11
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者:
再现理想
时间:
2015-4-6 09:45
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者:
爱飞
时间:
2015-4-11 00:09
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者:
精灵巫婆
时间:
2015-4-17 17:58
Ps:以上纯属原创,如有雷同,纯属巧合
作者:
仓酷云
时间:
2015-4-21 15:52
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者:
蒙在股里
时间:
2015-5-10 19:08
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者:
飘飘悠悠
时间:
2015-6-6 04:23
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox 支持的不是很好,所以能少用还是少用的好。
作者:
海妖
时间:
2015-6-11 22:52
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者:
灵魂腐蚀
时间:
2015-6-17 09:56
兴趣是最好的老师,百度是最好的词典。
作者:
只想知道
时间:
2015-6-20 22:34
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者:
谁可相欹
时间:
2015-6-28 01:36
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者:
若天明
时间:
2015-7-6 03:34
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
作者:
再见西城
时间:
2015-7-14 18:52
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2