文章來源:PHPBuilder.com
原作者:Luis Argerich
翻譯:erquan
erquan注:本人現(xiàn)還未來得及體驗PHP5,只是翻譯一篇老外的文章。
以下均由erquan翻譯,第1次作這些的事情希望沒有誤導(dǎo)大家。有些 " /> 韩国电影久久,日韩精品久久久久久久电影,动漫人物差差差30分钟免费看

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

第1次親密接觸PHP5(1)


文章來源:phpBuilder.com
原作者:Luis Argerich
翻譯:erquan
erquan注:本人現(xiàn)還未來得及體驗php5,只是翻譯一篇老外的文章。
以下均由erquan翻譯,第1次作這些的事情希望沒有誤導(dǎo)大家。有些不準(zhǔn)的地方請諒解。
大家看這樣的行不行,如果行的話,偶就翻譯完,不行就翻譯了,免得誤導(dǎo)了大家,也累哦。。。。:)
轉(zhuǎn)貼時請注明文章來源,謝謝:)


php5的正式版還沒發(fā)布,但我們可以學(xué)習(xí)、體驗下開發(fā)版給我們帶來的php新特性。
本文將集中介紹以下3大php5新功能:
* 新對象模式
* 結(jié)構(gòu)化異常處理
* 名稱空間

在正式開始之前,請注意:
*文章中的部分例子用php4的方法實現(xiàn),只是為了增強文章的可讀性
*本文所描述的新特性可能會與正式版特性有出入,請以正式版本為準(zhǔn)。

* 新對象模式

php5新的對象模式在php4的基礎(chǔ)上做了很大的"升級",你看起來會很像Java:(。
下面的一些文字將對它做一些簡單介紹,并且附有小例子讓您開始體驗php5的新特性
come on~~:)

* 構(gòu)造函數(shù) 和 析構(gòu)函數(shù)
* 對象的引用
* 克隆對象
* 對象的3種模式:私有、公共和受保護
* 接口
* 虛擬類
* __call()
* __set()和__get()
* 靜態(tài)成員

構(gòu)造函數(shù) 和 析構(gòu)函數(shù)

php4中,和類名一樣的函數(shù)被默認(rèn)為該類的構(gòu)造器,并且在php4沒有析構(gòu)函數(shù)的概念。(二泉 注:這點和Java一樣)
但從php5開始,構(gòu)造函數(shù)被統(tǒng)一命名為 __construct,而且有了析構(gòu)函數(shù):__destruct(二泉 注:這點卻和Delphi一樣,可見php5吸收了眾多的成熟的OO思想,可C可賀~~):
例1:構(gòu)造函數(shù)和析構(gòu)函數(shù)

<?php
class foo {
  var $x;

  function __construct($x) {
    $this->x = $x;
  }

  function display() {
    print($this->x);
  }

  function __destruct() {
    print("bye bye");
  }
}

$o1 = new foo(4);
$o1->display();
?>

運行完你將看到輸出了"bye bye",這是因為類在終止的時候調(diào)用了__destruct()析構(gòu)函數(shù)~~

對象的引用

正如你所知道的一樣,在php4中,對一個函數(shù)或方法傳遞一個變量時,實際上是傳遞了一個copy,除非你用了傳址符&來聲明
你在做一個變量的引用。在php5中,對象總是以引用的方式被指定:
例2:對象的引用

<?php
class foo {
  var $x;

  function setX($x) {
    $this->x = $x;
  }

  function getX() {
    return $this->x;
  }
}

$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>

(二泉 注:你將看到"Oh my god!"的輸出)
克隆對象

如上,如果有時不想得到對象的引用而想用copy時,怎么辦?在php5提供的 __clone 方法中實現(xiàn):
例3:克隆對象

<?php
class foo {
  var $x;

  function setX($x) {
    $this->x = $x;
  }

  function getX() {
    return $this->x;
  }
}

$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5);

if($o1->getX() != $o2->getX()) print("Copies are independant");
?>

克隆對象的方法在已被應(yīng)用到很多語言中,所以你不必?fù)?dān)心它的性能:)。

Private, Public 和 Protected

php4中,你可以在對象的外面操作它任意的方法和變量--因為方法和變量是公用的。在php5引用了3種模式來控制
對變量、方法的控制權(quán)限:Public(公用的)、Protected(受保護)和Private(私有)

Public:方法和變量可以在任意的時候被訪問到
Private:只能在類的內(nèi)部被訪問,子類也不能訪問
Protected:只能在類的內(nèi)部、子類中被訪問

例子4:Public, protected and private

<?php
class foo {
  private $x;

  public function public_foo() {
    print("I'm public");
  }

  protected function protected_foo() {
    $this->private_foo(); //Ok because we are in the same class we can call private methods
    print("I'm protected");
  }

  private function private_foo() {
    $this->x = 3;
    print("I'm private");
  }
}

class foo2 extends foo {
  public function display() {
    $this->protected_foo();
    $this->public_foo();
    // $this->private_foo();  // Invalid! the function is private in the base class
  }
}

$x = new foo();
$x->public_foo();
//$x->protected_foo();  //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo();    //Invalid private methods can only be used inside the class

$x2 = new foo2();
$x2->display();
?>


提示:變量總是私有形式,直接訪問一個私有變量并不是一個好的OOP思想,應(yīng)該用其他的方法來實現(xiàn) set/get 的功能


接口

正如你知道的一樣,在 php4 中實現(xiàn)繼承的語法是"class foo extends parent"。無論在php4 還是在 php5 中,都不支持多重繼承即只能從一個類往下繼承。 php5中的"接口"是這樣的一種特殊的類:它并不具體實現(xiàn)某個方法,只是用來定義方法的名稱和擁有的元素,然后通過關(guān)鍵字將它們一起引用并實現(xiàn)具體的動作。

Example 5: 接口
<?php
interface displayable {
  function display();
}

interface printable {
  function doprint();
}

class foo implements displayable,printable {
  function display() {
    // code
  }

  function doprint() {
    // code
  }
}
?>

這對代碼的閱讀性和理解性是非常有幫助的:讀到該類時,你就知道foo包含了接口displayable和printable,而且一定有print()(二泉 注:應(yīng)該是doprint())方法和display()方法。不必知道它們內(nèi)部是如何實現(xiàn)就可輕松操作它們只要你看到foo的聲明。

虛擬類

虛擬類是一種不能被實例化的類,它可以像超類一樣,可以定義方法和變量。
在虛擬類中還可以定義虛擬的方法,而且在該方法也不能在該類是被實現(xiàn),但必須在其子類中被實現(xiàn)

Example 6: 虛擬類

<?php
abstract class foo {
  protected $x;

  abstract function display();

  function setX($x) {
    $this->x = $x;
  }
}


class foo2 extends foo {
  function display() {
    // Code
  }
}
?>


__call()方法

php5時,如果你定義了 __call()方法,當(dāng)你試圖訪問類中一個不存在的變量或方法時,__call()就會被自動調(diào)用:
Example 7: __call


<?php
class foo {

  function __call($name,$arguments) {
    print("Did you call me? I'm $name!");
  }
}

$x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>


這個特殊的方法被習(xí)慣用來實現(xiàn)"方法重載",因為你依靠一個私有參數(shù)來實現(xiàn)并檢查這個參數(shù):
Exampe 8:  __call 實現(xiàn)方法重載

<?php
class Magic {

  function __call($name,$arguments) {
    if($name=='foo') {
      if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
      if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
    }
  }

  private function foo_for_int($x) {
    print("oh an int!");
  }

  private function foo_for_string($x) {
    print("oh a string!");
  }
}

$x = new Magic();
$x->foo(3);
$x->foo("3");
?>


__set()方法 和 __get()方法

當(dāng)訪問或設(shè)置一個未定義的變量時,這兩個方法將被調(diào)用:

Example 9: __set and __get

<?php
class foo {

  function __set($name,$val) {
    print("Hello, you tried to put $val in $name");
  }

  function __get($name) {
    print("Hey you asked for $name");
  }
}

$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>

php技術(shù)第1次親密接觸PHP5(1),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美在线看欧美视频免费 | 国产中文字幕免费观看 | 青草国产在线视频免费 | 国内精品不卡一区二区三区 | 岛国大片在线观看免费版 | 老熟风间由美AV在线一区二区 | 乌克兰xxxxx| 伊人久久大香线蕉综合电影 | 北条麻妃快播 | 免费麻豆国产黄网站在线观看 | 综合人妻久久一区二区精品 | 国产人妻人伦精品无码.麻豆 | 亚洲蜜桃AV色情精品成人 | 久久国产精品麻豆AV影视 | 在线精品视频免费观看 | 色人阁综合 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | chinese耄耋70老太性 | 九九九精品国产在线 | 在教室做啊好大用力 | 涩涩视频www在线观看入口 | a视频在线观看免费 | 秋霞电影网午夜一级鲁丝片 | 可以看的黄页的网站 | 俄罗斯XXXXXL18 | 国产精品麻豆高潮刺激A片 国产精品麻豆a在线播放 | 日本午夜精品久久久无码 | 优优色影院 | 性xxx免费 | a级老头和老太xxxx | 三级网站视频在线观看 | 國產日韓亞洲精品AV | 在线看无码的免费网站 | 92精品国产成人观看免费 | 九九热视频这里只有精 | 在线二区 中文 无码 | 小SB几天没做SAO死了H | 一本道无码字幕在线看 | 韩国电影real在线观看完整版 | 人成片在线观看亚洲无遮拦 | 天天影视网网色色欲 |