搜尋
首頁後端開發php教程第1次親密接觸PHP5(1)_PHP教程


文章來源:PHPBuilder.com
原作者:Luis Argerich
翻譯:erquan
erquan附註:本人現還未來得及體驗PHP5,只是翻譯一篇老外的文章。
以下皆由erquan翻譯,第1次作這些的事情希望沒有誤導大家。有些不准的地方請諒解。
大家看這樣的行不行,如果行的話,偶就翻譯完,不行就翻譯了,免得誤導了大家,也累哦。 。 。 。 :)
轉貼時請註明文章來源,謝謝:)


PHP5的正式版還沒發布,但我們可以學習、體驗下開發版帶給我們的PHP新特性。
本文將集中介紹以下3大PHP5新功能:
* 新物件模式
* 結構化異常處理
* 名稱空間

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

* 新物件模式

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

* 構造函數和析構函數
* 物件的引用
*複製物件
* 物件的3種模式:私有、公有和受保護
* 介面
* 虛擬類別
* __call()
* __set()和__get()
* 靜態成員

建構子 和 析構函式

在PHP4中,和類別名稱一樣的函式被預設為該類別的建構器,在PHP4沒有析構函式的概念。 (二泉注:這點和JAVA一樣)
但從PHP5開始,構造函數被統一命名為__construct,而且有了析構函數:__destruct(二泉注:這點卻和Delphi一樣,可見PHP5吸收了眾多的成熟的OO思想,可C可賀~~):
例1:構造函數和析構函數

class foo {
  var $x ;

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

  function __destruct() {
    print("bye bye");
  }
}
}
);
$o1->display();
?>

運行完你將看到輸出了"bye bye",這是因為類別在終止的時候調用了__destruct( )析構函數~~

物件的引用

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

class foo {
  var $x;

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

  function getX() {
🎜>}

$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 方法中實作:
例3:複製物件

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");
?>

克隆物件的方法已被應用到很多語言中,所以你不必擔心它的性能:)。

Private, Public 和 Protected

在PHP4中,你可以在物件的外部操作它任意的方法和變數--因為方法和變數是公用的。在PHP5引用了3種模式來控制
對變數、方法的控制權限:Public(公用的)、Protected(受保護)和Private(私有)

Public:方法和變數可以在任意的時候被訪問到
Private:只能在類別的內部被訪問,子類別也不能訪問
Protected:只能在類別的內部、子類別中被存取

範例4: Public, protected and private

class foo {
  private $x;

  );
  }

  protected function protected_foo() {
    $this->private_foo(); //Ok because we areare in same class  I'm protected");
  }

  private function private_foo() {
    $this->x = 3;
 }
}

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

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

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


提示:變數總是私有形式,直接存取一個私有變數並不是一個好的OOP思想,應該用其他的方法來實現set/get 的功能


介面

就像你知道的一樣,在 PHP4 中實作繼承的語法是"class foo extends parent"。無論在PHP4 或 PHP5 中,都不支援多重繼承即只能從一個類別往下繼承。 PHP5中的"介面"是這樣的一種特殊的類別:它並不具體實現某個方法,只是用來定義方法的名稱和擁有的元素,然後透過關鍵字將它們一起引用並實現具體的動作。

Example 5: 介面
interface displayable {
  function display();
}

interface printable();
}

interface printable(face printable) ;
}

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

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

虛擬類別

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

Example 6: 虛擬類別

abstract class foo {
  protected $x;

  abstract function display();

this abstract function display();

this abstract function display();

this abstract function display();

this abstract function display();

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


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


__call()方法

在PHP5時,如果你定義了__call()方法,當你試圖存取類別中一個不存在的變數或方法時,__call()就會被自動呼叫:
Example 7: __call


class foo {

  function __call($name,$arguments) {
  function __call($name,$arguments) {
  function __call($name,$arguments) {
  I'm $name!");
  }
}

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


這個特殊的方法被習慣用來實現"方法重載",因為你依靠一個私有參數來實現並檢查這個參數:
Exampe 8 :  __call 實作方法重載

class Magic {

  function __call($name,$arguments) {
  function __call($name,$arguments) {
  function __call($name,$arguments) {
  {
      if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
      if(is_forstring($arguments[0]) $guments [0]);
    }
  }

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

$x = new Magic();
}

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


__set()方法和__get()方法

當存取或設定一個未定義的變數時,這兩個方法會被呼叫:

Example 9: __set and __get

  }}}
);
$x->bar = 3;print($x->winky_winky);?> http://www.bkjia.com/PHPjc/314174.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314174.htmlTechArticle文章來源:PHPBuilder.com 原作者:Luis Argerich 翻譯:erquan erquan附註:本人現今未來也不如體驗PHP5 ,只是翻譯一篇老外的文章。 以下皆由erquan翻譯...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器