国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 php手冊 PHP中實現(xiàn)面向?qū)ο缶幊蹋ㄉ希?/span>

PHP中實現(xiàn)面向?qū)ο缶幊蹋ㄉ希?/h1> Jun 21, 2016 am 09:15 AM
function obj php this


編程|對象

這篇文章介紹在PHP的面向?qū)ο缶幊蹋∣OP)。我將演示如何用面向?qū)ο蟮母拍罹幊鲚^少的代碼但更好的程序。祝大家好運。

  面向?qū)ο缶幊痰母拍顚γ恳粋€作者來說都有不同的看法,我提醒一下一個面向?qū)ο笳Z言應(yīng)有的東西:

   - 數(shù)據(jù)抽象和信息隱藏
   - 繼承
   - 多態(tài)性

  在PHP中使用類進行封裝的辦法:

class Something {
// In OOP classes are usually named starting with a cap letter.
var $x;

function setX($v) {
// Methods start in lowercase then use lowercase to seprate
// words in the method name example getValueOfArea()
$this->x=$v;
}

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

?>
  當(dāng)然你可以用你自己的辦法,但有一個標(biāo)準總是好的。

  PHP中類的數(shù)據(jù)成員使用 "var" 定義,數(shù)據(jù)成員是沒有類型直到被賦值。一個數(shù)據(jù)成員可能是一個 integer、數(shù)組、聯(lián)合數(shù)組(associative array)或甚至對象(object). 方法在類里定義成函數(shù),在方法里存取數(shù)據(jù)成員,你必須使用$this->name 這樣的辦法,否則對方法來說是一個函數(shù)的局部變量。

  使用 new 來創(chuàng)建一個對象

$obj = new Something;
  然后使用成員函數(shù)

$obj->setX(5);
$see = $obj->getX();
  setX 成員函數(shù)將 5 賦給對象(而不是類)obj 中成員變量, 然后 getX 返回值 5.

  你也可以用對象引用來存取成員變量,例如:$obj->x=6; 然而,這不一種好的面向?qū)ο缶幊痰姆椒?。我堅持你?yīng)使用成員函數(shù)來設(shè)置成員變量的值和通過成員函數(shù)來讀取成員變量。如果你認為成員變量是不可存取的除了使用成員函數(shù)的辦法,你將成為一個好的面向?qū)ο蟪绦騿T。 但不幸的是PHP本身沒有辦法聲明一個變量是私有的,所以允許糟糕的代碼存在。

  在 PHP 中繼承使用 extend 來聲明。

class Another extends Something {
 var $y;
 function setY($v) {
  // Methods start in lowercase then use lowercase to seperate
  // words in the method name example getValueOfArea()
  $this->y=$v;
 }

 function getY() {
  return $this->y;
 }
}

?>
  這樣類 "Another" 的對象擁有父類的所用成員變量及方法函數(shù),再加上自己的成員變量及成員函數(shù)。如:

$obj2=new Another;
$obj2->setX(6);
$obj2->setY(7);
  多重繼承不被支持,所以你不能讓一個類繼承多個類。

  在繼承類中你可以重新定義來重定義方法,如果我們在 "Another" 重新定義 getX,那么我們不再能存取 "Something" 中的成員函數(shù) getX. 同樣,如果我們在繼承類中聲明一個和父類同名的成員變量,那么繼承類的變量將隱藏父類的同名變量。

  你可以定義一個類的構(gòu)造函數(shù), 構(gòu)造函數(shù)是和類同名的成員函數(shù),在你創(chuàng)建類的對象時被調(diào)用。

class Something {
 var $x;

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

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

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

?>
  所以可以用如下方法創(chuàng)建對象:

$obj=new Something(6);
  構(gòu)造函數(shù)自動賦值 5 給成員變量 x, 構(gòu)造函數(shù)和成員函數(shù)都是普通的PHP函數(shù),所以你可以使用缺省參數(shù)。

function Something($x="3",$y="5")
  然后:

$obj=new Something(); // x=3 and y=5
$obj=new Something(8); // x=8 and y=5
$obj=new Something(8,9); // x=8 and y=9
  缺省參數(shù)的定義方法和 C++ 一樣,因此你不能傳一個值給 Y 但讓 X 取缺省值,實參的傳遞是從左到右,當(dāng)沒有更多的實參時函數(shù)將使用缺省參數(shù)。

  只有當(dāng)繼承類的構(gòu)造函數(shù)被調(diào)用后,繼承類的對象才被創(chuàng)建,父類的構(gòu)造函數(shù)沒有被調(diào)用,這是PHP不同其他面向?qū)ο笳Z言的特點,因為構(gòu)造函數(shù)調(diào)用鏈是面向?qū)ο缶幊痰奶攸c。如果你想調(diào)用基類的構(gòu)造函數(shù),你不得不在繼承類的構(gòu)造函數(shù)中顯式調(diào)用它。這樣它能工作是因為在繼承類中父類的方法全部可用。

function Another() {
$this->y=5;
$this->Something(); //explicit call to base class constructor.
}

?>
  在面向?qū)ο缶幊讨幸环N好的機制是使用抽象類,抽象類是一種不能實例化而是用來給繼承類定義界面的類。設(shè)計師經(jīng)常使用抽象類來強制程序員只能從特定的基類來繼承,所以就能確定新類有所需的功能,但在PHP中沒有標(biāo)準的辦法做到這一點,不過:

  如果你在定義基類是需要這個特點,可以通過在構(gòu)造函數(shù)中調(diào)用 "die",這樣你就可以確保它不能實例化,現(xiàn)在定義抽象類的函數(shù)并在每個函數(shù)中調(diào)用 "die",如果在繼承類中程序員不想重定義而直接調(diào)用基類的函數(shù),將會產(chǎn)生一個錯誤。

  此外,你需要確信因為PHP沒有類型,有些對象是從基類繼承而來的繼承類創(chuàng)建的,因此增加一個方法在基類來辨別類(返回 "一些標(biāo)識")并驗證這一點,當(dāng)你收到一個對象作為參數(shù)派上用場。 但對于一個惡棍程序沒用辦法,因為他可以在繼承類中重定義此函數(shù),通常這種辦法只對懶惰的程序員奏效。當(dāng)然,最好的辦法是防止程序接觸到基類的代碼只提供界面。

  重載在PHP中不被支持。在面向?qū)ο缶幊讨心憧梢酝ㄟ^定義不同參數(shù)種類和多少來重載一個同名成員函數(shù)。PHP是一種松散的類型語言,所以參數(shù)類型重載是沒有用的,同樣參數(shù)個數(shù)不同的辦法重載也不能工作。

  有時候,在面向?qū)ο缶幊讨兄剌d構(gòu)造函數(shù)很有用,所以你能以不同的方式創(chuàng)建不同的對象(通過傳遞不同的參數(shù)個數(shù))。一個小巧門可以做到這一點:

class Myclass {
function Myclass() {
$name="Myclass".func_num_args();
$this->$name();
//Note that $this->$name() is usually wrong but here
//$name is a string with the name of the method to call.
}

function Myclass1($x) {
code;
}
function Myclass2($x,$y) {
code;
}
}

?>
  通過這種辦法可以部分達到重載的目的。

$obj1=new Myclass(1); //Will call Myclass1
$obj2=new Myclass(1,2); //Will call Myclass2
  感覺還不錯!



本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

PHP設(shè)置的簡單指南 PHP設(shè)置的簡單指南 Jul 18, 2025 am 04:25 AM

PHP設(shè)置的關(guān)鍵在于明確安裝方式、配置php.ini、連接Web服務(wù)器及啟用必要擴展。1.安裝PHP:Linux用apt、Mac用Homebrew、Windows推薦XAMPP;2.配置php.ini:調(diào)整錯誤報告、上傳限制等并重啟服務(wù)器;3.搭配Web服務(wù)器:Apache通過mod_php,Nginx使用PHP-FPM;4.安裝常用擴展:如mysqli、json、mbstring等以支持完整功能。

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易于效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

掌握PHP塊評論 掌握PHP塊評論 Jul 18, 2025 am 04:35 AM

PHPblockcommentsareusefulforwritingmulti-lineexplanations,temporarilydisablingcode,andgeneratingdocumentation.Theyshouldnotbenestedorleftunclosed.BlockcommentshelpindocumentingfunctionswithPHPDoc,whichtoolslikePhpStormuseforauto-completionanderrorche

編寫有效的PHP評論 編寫有效的PHP評論 Jul 18, 2025 am 04:44 AM

注釋不能馬虎是因為它要解釋代碼存在的原因而非功能,例如兼容老接口或第三方限制,否則看代碼的人只能靠猜。必須加注釋的地方包括復(fù)雜的條件判斷、特殊的錯誤處理邏輯、臨時繞過的限制。寫注釋更實用的方法是根據(jù)場景選擇單行注釋或塊注釋,函數(shù)、類、文件開頭用文檔塊注釋說明參數(shù)與返回值,并保持注釋更新,對復(fù)雜邏輯可在前面加一行概括整體意圖,同時不要用注釋封存代碼而應(yīng)使用版本控制工具。

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關(guān)鍵在于明確目的與規(guī)范,注釋應(yīng)解釋“為什么”而非“做了什么”,避免冗余或過于簡單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說明,提升可讀性與工具兼容性;2.強調(diào)邏輯背后的原因,如說明為何需手動輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項與問題,便于后續(xù)追蹤與協(xié)作。好的注釋能降低溝通成本,提升代碼維護效率。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

通過評論提高可讀性 通過評論提高可讀性 Jul 18, 2025 am 04:46 AM

寫好注釋的關(guān)鍵在于說明“為什么”而非僅“做了什么”,提升代碼可讀性。1.注釋應(yīng)解釋邏輯原因,例如值選擇或處理方式背后的考量;2.對復(fù)雜邏輯使用段落式注釋,概括函數(shù)或算法的整體思路;3.定期維護注釋確保與代碼一致,避免誤導(dǎo),必要時刪除過時內(nèi)容;4.在審查代碼時同步檢查注釋,并通過文檔記錄公共邏輯以減少代碼注釋負擔(dān)。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP注釋代碼常用方法有三種:1.單行注釋用//或#屏蔽一行代碼,推薦使用//;2.多行注釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧注釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

See all articles