監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢(xún)管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶(hù)案例 | 在線試用
X 關(guān)閉

PHP 5.4 相關(guān)知識(shí)

申請(qǐng)免費(fèi)試用、咨詢(xún)電話(huà):400-8352-114

PHP 5.4來(lái)了,這是自5.3后的又一次主版本晉級(jí)。此次晉級(jí)改動(dòng)較為明顯,刪除了一些過(guò)氣兒的函數(shù),帶來(lái)了高達(dá)20%的速度提拔和更少的內(nèi)存運(yùn)用。

  新特征與改動(dòng)

  此次更新的要害新特征,包羅:新增traits,更精簡(jiǎn)的Array數(shù)組語(yǔ)法,供測(cè)試運(yùn)用的內(nèi)建webserver,可以閉包運(yùn)用的$this指針,實(shí)例化類(lèi)成員拜訪,

  PHP 5.4.0 功能大幅提拔, 修復(fù)超越100個(gè)bug. 廢棄了register_globals, magic_quotes以及平安形式。 別的值得一提的是多字節(jié)支撐曾經(jīng)默許啟用了,default_charset從ISO-8859-1曾經(jīng)變?yōu)閁TF-8. 默許發(fā)送“Content-Type: text/html; charset=utf-8”,你再也不需求在HTML里寫(xiě)meta tag,也無(wú)需為UTF-8兼容而傳送額定的header了。

  Traits

  Traits (橫向重用/多重承繼)是一組構(gòu)造很像“類(lèi)”(但不克不及實(shí)例化)的辦法,它可以閃開(kāi)發(fā)人員在分歧的類(lèi)中輕松地重用辦法。 PHP為單承繼言語(yǔ),子類(lèi)只能承繼一個(gè)父類(lèi),于是Traits來(lái)了。

  Traits的最佳使用是多類(lèi)之間可以共享一樣的函數(shù)。打個(gè)比如,我們要做個(gè)網(wǎng)站,需求運(yùn)用Facebook和Twitter的APIs。我們要建 2個(gè)類(lèi),假如是以前,我們需求寫(xiě)一個(gè)cURL的辦法而且復(fù)制/粘貼到兩個(gè)類(lèi)中。目前不必了,運(yùn)用Traits重用代碼吧,此次真正地遵照了 DRY(Don’t Repeat Yourself)準(zhǔn)則。

  <span style="COLOR: rgb(0,100,0)">/** cURL wrapper trait */

<span style="COLOR: rgb(0,100,0)">  trait cURL

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  public function curl($url)

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  $ch = curl_init();

<span style="COLOR: rgb(0,100,0)">  curl_setopt($ch, CURLOPT_URL, $url);

<span style="COLOR: rgb(0,100,0)">  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

<span style="COLOR: rgb(0,100,0)">  $output = curl_exec($ch);

<span style="COLOR: rgb(0,100,0)">  curl_close($ch);

<span style="COLOR: rgb(0,100,0)">  return $output;

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  /** Twitter API Class */

<span style="COLOR: rgb(0,100,0)">  class Twitter_API

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  use cURL; // use trait here

<span style="COLOR: rgb(0,100,0)">  public function get($url)

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return json_decode($this->curl('http://api.twitter.com/'.$url));

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  /** Facebook API Class */

<span style="COLOR: rgb(0,100,0)">  class Facebook_API

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  use cURL; // and here

<span style="COLOR: rgb(0,100,0)">  public function get($url)

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return json_decode($this->curl('http://graph.facebook.com/'.$url));

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  $facebook = new Facebook_API();

<span style="COLOR: rgb(0,100,0)">  echo $facebook->get('500058753')->name; // Rasmus Lerdorf

<span style="COLOR: rgb(0,100,0)">  /** Now demonstrating the awesomeness of PHP 5.4 syntax */

<span style="COLOR: rgb(0,100,0)">  echo (new Facebook_API)->get('500058753')->name;

<span style="COLOR: rgb(0,100,0)">  $foo = 'get';

<span style="COLOR: rgb(0,100,0)">  echo (new Facebook_API)->$foo('500058753')->name;

<span style="COLOR: rgb(0,100,0)">  echo (new Twitter_API)->get('1/users/show.json?screen_name=rasmus')->name;

  看清楚了嗎?沒(méi)有?那你來(lái)瞅瞅更簡(jiǎn)略的例子

  <span style="COLOR: rgb(0,100,0)">trait Hello

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  public function hello()

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return 'Hello';

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  trait Cichui

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  public function cichui()

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return ' cichui';

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  class HelloCichui

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  use Hello, Cichui;

<span style="COLOR: rgb(0,100,0)">  public function the_end()

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return '!';

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  $o = new HelloCichui;

<span style="COLOR: rgb(0,100,0)">  echo $o->hello(), $o->cichui(), $o->the_end();

<span style="COLOR: rgb(0,100,0)">  echo (new Hello)->hello(), (new Cichui)->cichui(), (new HelloCichui)->the_end();

  內(nèi)建的Web-Sever

  在Web開(kāi)拓中,Apache HTTPD是PHP的最佳拍檔。有時(shí),你開(kāi)拓時(shí)用不上需求裝備httpd.conf的apache大殺器,而只需求一個(gè)可以在敕令行中運(yùn)用的超小型 Webserver. 感激PHP(先感激國(guó)度),PHP 5.4此次內(nèi)建了CLI Web server。(PHP CLI webserver僅供開(kāi)拓運(yùn)用,回絕產(chǎn)物用處)

  舉個(gè)栗子(windows平臺(tái)):

  步調(diào)一:樹(shù)立web根目次, Router和Index

  在硬盤(pán)根目次(比方C盤(pán))樹(shù)立一個(gè)public_html目次,目次里新建一個(gè)router.php文件,把以下代碼復(fù)制粘貼進(jìn)去:

 <span style="COLOR: rgb(0,100,0)">  // router.php

<span style="COLOR: rgb(0,100,0)">  if (preg_match('#\.php$#', $_SERVER['REQUEST_URI']))

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  require basename($_SERVER['REQUEST_URI']); // serve php file

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  else if (strpos($_SERVER['REQUEST_URI'], '.') !== false)

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return false; // serve file as-is

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  ?>

  再來(lái)新建一個(gè)index.php文件,復(fù)制粘貼以下代碼:

<span style="COLOR: rgb(0,100,0)">  // index.php

<span style="COLOR: rgb(0,100,0)">  echo 'Hello cichui.com Readers!';

<span style="COLOR: rgb(0,100,0)">  ?>

  編纂你的php.ini文件,找到”include_path”一行,把c:\public_html添加進(jìn)去(分號(hào)分隔):

  1include_path = ".;C:\php\PEAR;C:\public_html"

  存盤(pán)退出,看下一步

  步調(diào)二:運(yùn)轉(zhuǎn)Web-Server

  切換到php的裝置目次,敲下最要害的敕令—運(yùn)轉(zhuǎn)Web-server

  php -S 0.0.0.0:8080 -t C:\public_html router.php

  開(kāi)端了嗎?不要封閉窗口,假如歷程封閉Web server也跟著封閉了。

  翻開(kāi)閱讀器:拜訪http://localhost:8080/index.php吧,

  Hello cichui.com Readers!

  看到了吧?對(duì),就是這個(gè)!

  提醒1:你可以思索自建一個(gè)php-server.bat的批處置,扔到桌面上今后就可以雙擊啟動(dòng)了。

  提醒2:運(yùn)用0.0.0.0而不是localhost,可以包管外網(wǎng)不會(huì)拜訪到你的web serve。

  精簡(jiǎn)的Array數(shù)組語(yǔ)法

  PHP 5.4為您送上精簡(jiǎn)的array數(shù)組語(yǔ)法:

<span style="COLOR: rgb(0,100,0)">  $fruits = array('apples', 'oranges', 'bananas'); // "old" way

<span style="COLOR: rgb(0,100,0)">  // 學(xué)Javascript的數(shù)組了

<span style="COLOR: rgb(0,100,0)">  $fruits = ['apples', 'oranges', 'bananas'];

<span style="COLOR: rgb(0,100,0)">  // 聯(lián)系關(guān)系數(shù)組

<span style="COLOR: rgb(0,100,0)">  $array = [

<span style="COLOR: rgb(0,100,0)">  'foo' => 'bar',

<span style="COLOR: rgb(0,100,0)">  'bar' => 'foo'

<span style="COLOR: rgb(0,100,0)">  ];

  當(dāng)然,舊語(yǔ)法照舊有用,我們多了一種選擇。

  數(shù)構(gòu)成員拜訪解析(Array dereferencing*)

  處置數(shù)組再也不需求暫時(shí)變量了。

  假定我們需求獲取Fang Bin Xin的middle name,

<span style="COLOR: rgb(0,100,0)">  echo explode(‘ ‘, ‘Fang Bin Xin’)[1]; // Bin

  PHP 5.4之前,我們需求如許:

<span style="COLOR: rgb(0,100,0)">  $tmp = explode(‘ ‘, ‘Fang Bin Xin’);

<span style="COLOR: rgb(0,100,0)">  echo $tmp[1]; // Bin

  目前,我們可以如許玩了:

<span style="COLOR: rgb(0,100,0)">  echo end(explode(‘ ‘, ‘Fang Bin Xin’)); // Xin

  再來(lái)個(gè)高級(jí)點(diǎn)的例子:

<span style="COLOR: rgb(0,100,0)">  function foobar()

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return ['foo' => ['bar' => 'Hello']];

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  echo foobar()['foo']['bar']; // Hello

  *瓷錘注: Array dereferencing直譯應(yīng)為數(shù)組解除援用,結(jié)果欠安。其實(shí)更精確的翻譯應(yīng)為:“對(duì)函數(shù)返回后果的數(shù)構(gòu)成員拜訪解析支撐”,詳見(jiàn)PHP官方分析。

  匿名函數(shù)中的$this

  目前,你可以在類(lèi)實(shí)例中經(jīng)過(guò)$this援用一個(gè)匿名函數(shù)(也叫閉包函數(shù))

  <span style="COLOR: rgb(0,100,0)">class Foo

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  function hello() {

<span style="COLOR: rgb(0,100,0)">  echo 'Hello Cichui!';

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  function anonymous()

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return function() {

<span style="COLOR: rgb(0,100,0)">  $this->hello(); // 之前是不成能這么玩的

<span style="COLOR: rgb(0,100,0)">  };

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  class Bar

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  function __construct(Foo $o) // object of class Foo typehint

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  $x = $o->anonymous(); // get Foo::hello()

<span style="COLOR: rgb(0,100,0)">  $x(); // execute Foo::hello()

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  new Bar(new Foo); // Hello Cichui!

  其實(shí)以前也能遷就用,就是有點(diǎn)費(fèi)力: 

  <span style="COLOR: rgb(0,100,0)">function anonymous()

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  $that = $this; // $that is now $this

<span style="COLOR: rgb(0,100,0)">  return function() use ($that) {

<span style="COLOR: rgb(0,100,0)">  $that->hello();

<span style="COLOR: rgb(0,100,0)">  };

<span style="COLOR: rgb(0,100,0)">  }

  

  無(wú)論php.ini中若何裝備,short_open_tag, 也就是 交換以前的了。

  支撐二進(jìn)制直接量

  八進(jìn)制(oct),前面加0;十六進(jìn)制(hex),前面加0x;二進(jìn)制(bin),目前在前面加0b就可以了

<span style="COLOR: rgb(0,100,0)">  echo 0b11111; // PHP 5.4支撐二進(jìn)制了

<span style="COLOR: rgb(0,100,0)">  echo 31; // 十進(jìn)制

<span style="COLOR: rgb(0,100,0)">  echo 0x1f; // 十六進(jìn)制

<span style="COLOR: rgb(0,100,0)">  echo 037; // 八進(jìn)制

  函數(shù)類(lèi)型提醒

  自PHP 5.1起,類(lèi)型提醒支撐對(duì)象和數(shù)組,PHP 5.4開(kāi)端支撐callable。

<span style="COLOR: rgb(0,100,0)">  function my_function(callable $x)

<span style="COLOR: rgb(0,100,0)">  {

<span style="COLOR: rgb(0,100,0)">  return $x();

<span style="COLOR: rgb(0,100,0)">  }

<span style="COLOR: rgb(0,100,0)">  function my_callback_function(){return 'Hello Cichui!';}

<span style="COLOR: rgb(0,100,0)">  class Hello{static function hi(){return 'Hello Cichui!';}}

<span style="COLOR: rgb(0,100,0)">  class Hi{function hello(){return 'Hello Cichui!';}}

<span style="COLOR: rgb(0,100,0)">  echo my_function(function(){return 'Hello Cichui!';}); // 閉包函數(shù)

<span style="COLOR: rgb(0,100,0)">  echo my_function('my_callback_function'); // 回調(diào)函數(shù)

<span style="COLOR: rgb(0,100,0)">  echo my_function(['Hello', 'hi']); // 類(lèi)名,靜態(tài)辦法

<span style="COLOR: rgb(0,100,0)">  echo my_function([(new Hi), 'hello']); // 類(lèi)名,辦法名

  高精度計(jì)時(shí)器

  此次引入了$_SERVER['REQUEST_TIME_FLOAT']數(shù)組變量,微秒級(jí)精度(百萬(wàn)分之一秒,float類(lèi)型)。關(guān)于計(jì)算劇本運(yùn)轉(zhuǎn)工夫會(huì)十分有效:

<span style="COLOR: rgb(0,100,0)">  1echo 'Executed in ', round(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 2)

發(fā)布:2007-03-31 14:47    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:
南昌OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢(xún):400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢(xún)

泛普南昌網(wǎng)站建設(shè)公司其他應(yīng)用

南昌OA軟件 南昌OA新聞動(dòng)態(tài) 南昌OA信息化 南昌OA快博 南昌OA行業(yè)資訊 南昌軟件開(kāi)發(fā)公司 南昌門(mén)禁系統(tǒng) 南昌物業(yè)管理軟件 南昌倉(cāng)庫(kù)管理軟件 南昌餐飲管理軟件 南昌網(wǎng)站建設(shè)公司