2010-05-21 50 views
1

我需要清除PHP中的一些OOPS概念。PHP OOPS概念所需的一些指令

  1. 這是更快$this->method();self:method();
  2. 我知道static關鍵字的概念,但你可以請張貼它的實際用途。既然它不能被這個實例訪問,但是它有什麼好處?
  3. 什麼是工廠?我如何使用它?
  4. 什麼是單身人士?我如何使用它?
  5. 什麼是後期靜態綁定

http://www.php.net/manual/en/oop5.intro.php

我已經通過下面的鏈接,但我沒有得到它明確。

+4

很多東西在這裏問,我會建議你讀一些好的書本。 – Sarfraz 2010-05-21 06:29:35

+0

我可以推薦http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804 它是一種非常良好的閱讀。 – 2010-05-21 06:57:39

回答

0

我已經通過下面的鏈接,但我 不清楚它。

官方文檔豐富而全面,但有些用戶覺得很難理解。如果你不能把握,我建議你去通過在phpro.org的精彩教程(PHP的主題有很大很大的資源):

Object Oriented Programming with PHP

教程已經寫在簡單語言和現實世界的例子,對那些在理解OOP概念方面有困難的人非常有幫助。

1

2)靜態關鍵詞:不像在OOPS中使用的方法 和數據成員,其中 範圍由接入決定 說明符時,靜態 方法/屬性可作爲類的 一部分。所以對 類定義的所有實例都可用 。要爲屬性或 方法實現靜態關鍵字 功能,必須以 「static」關鍵字作爲前綴。要將值分配給 靜態變量,您需要使用範圍 解析運算符(::)以及 類名稱。

例如:

< ? 
class ClassName 
{ 
    static private $staticvariable; //Defining Static Variable 

    function __construct($value) 
    { 
     if($value != "") 
     { 
      ClassName::$staticvariable = $value; //Accessing Static Variable 
     } 
     $this->getStaticData(); 
    } 

    public function getStaticData() 
    { 
     echo ClassName::$staticvariable; //Accessing Static Variable 
    } 
} 

$a = new ClassName("12"); 
$a = new ClassName("23"); 
$a = new ClassName(""); 
?> 

輸出:

說明:

* Here i have declared static variable $staticvariable 
* In the constructor i am checking and value and then assigning the value 

給靜態變量 *最後getSta ticData()方法將輸出靜態變量 content

1)哪個更快$ this-> method();或self:method();

回答:「自我」(未$個體經營)是指 類,那裏的$此 指 類的當前實例的類型。 「self」用於靜態成員函數 中,允許您訪問靜態成員變量 。 $ this 用於非靜態成員 函數,並且是對調用 成員函數的類的 實例的引用。

因爲「這」是一個對象,你用 它像函數:$ this->成員,因爲「自我」 不是一個對象,它基本上是一個 型自動指 當前類,就用它如: self :: member

什麼是單身人士?我如何使用它? php

在軟件工程中,單例模式是一種設計模式,用於通過將類的實例化限制爲一個對象來實現單例的數學概念。當需要確切的一個對象來協調系統中的操作時,這非常有用。這個概念有時候被推廣到當只有一個對象存在時更有效地操作的系統,或者將實例化限制到一定數量的對象(比如五個)。一些人認爲它反模式,判斷它是過度使用,介紹其中實際上不要求一類的唯一實例中的情況下的不必要的限制,並引入了全局狀態到應用程序

實施例:

final class Singleton 
{ 

    protected static $_instance; 

    private function __construct() # we don't permit an explicit call of the constructor! (like $v = new Singleton()) 
    { } 

    private function __clone() # we don't permit cloning the singleton (like $x = clone $v) 
    { } 

    public static function getInstance() 
    { 
     if(self::$_instance === NULL) { 
     self::$_instance = new self(); 
     } 
     return self::$_instance; 
    } 
} 

$instance = Singleton::getInstance(); 
5)什麼是遲到靜態綁定?

參見:Late Static Binding

什麼是工廠?

參考Design Pattern

0

你問一個相當普遍的問題。這些都是真正的基本概念,所以你應該嘗試進一步研究,使用一般的OOP教程和參考。

只是爲了提供一些提示:你的大部分問題都是指「靜態」的概念。您需要了解類和類的實例之間的區別。這是關鍵概念。

A類是創建實例的藍圖。你只有一個類,但它有多個實例。要創建一個實例,請使用「new」關鍵字,併爲該實例指定一個名稱($ x = new A());但是您可以擁有不需要運行或訪問類實例的方法和字段。該類擁有它們,它們高於任何實例,它們不能訪問任何本身不是靜態的屬性或方法。它們非常有用,因爲它們可以保存全局數據和函數(如果您有一個靜態變量,則在整個執行過程中,無論它在哪裏調用都是一樣的)。

3

1)哪個更快$ this-> method();或self:method();

我成立了一個簡單的循環,其調用同一方法使用這兩種方法1,000,000次,結果是幾乎相等(現實 - >是略有快但極短融券)

2)我知道靜態關鍵字的概念,但你可以請張貼實際使用它。既然它不能被這個實例訪問,但是它有什麼好處?

你是什麼意思不被實例訪問?

public static $x; 
public static function mymethod() {}; 

可以通過self :: $ x和self :: mymethod()來訪問。

靜態成員有多種用法,但都不是很好。它們可以用來創建單例對象,可以用來調用類方法而不需要實例化類(對於類似引導對象的類)

3)什麼是工廠?我如何使用它?

工廠是用於抽象實例化類似對象所需的代碼的對象。例如,如果您有一個使用用戶層次結構的網站,則每個用戶級別可能都有自己的類別。基本上所有用戶類都將以相同的方式創建,但可能需要一個或兩個類特定的操作。

工廠對象將包含所有這些實例化代碼併爲開發人員提供一個簡單的接口。因此,您可以使用$ oFactory-> createUser()和$ oFactory-> createManager(),而不是在代碼的多個區域重複自己。

4)什麼是單身人士?我如何使用它?

單例是一個類,每次只能有一個實例。基本思想是,你將使用靜態方法和靜態變量來檢查對象是否已經被實例化。

您將使用一個單例,其中重要的是隻有一個類的實例,例如安全模型可能是單例,因爲您要確保代碼中只有一個地方負責認證用戶,如果你只需要一個數據庫連接,那麼數據庫抽象可能是單例(對於每個查詢繼續連接到同一服務器和同一數據庫是沒有意義的)

pre-PHP5.3 singletons有一些基礎缺點,因爲沒有後期的靜態綁定意味着你不能輕鬆地擴展一個基礎單例類。

5)什麼是晚期靜態綁定?

後期靜態綁定是在課堂上解決延遲的靜態方法來提高他們在OO使用(尤其是派生類)。 LSB允許自::__CLASS__解決當前類現在不是它們在定義的類。

例如,在之前版本的PHP ....

class parentClass { 
    public static function someMethod() { 
     echo(__CLASS__); 
    } 
} 

class childClass extends parentClass { 
} 

$oObject = new childClass(); 
$oObject::someMethod(); 

將會輸出parentClass到瀏覽器,使用LSB 將輸出childClass

這是許多事情,包括單身是有用的,因爲類是解決正確,現在可以定義一個單獨的基類,並有其他物體與預期結果進行擴展。

+0

仍然沒有明確的LSB .... – Avinash 2010-09-10 08:39:19

+0

PHP官方文檔解釋了LSB爲「靜::將不再使用,其中定義方法的類來解決,但寧願使用運行時信息來計算」 即。它是一種讓parentClass知道在調用靜態方法時實際實例化了哪個類的方法 – michael 2010-09-13 09:01:55

0

我強烈建議你閱讀一本關於這個主題的書。我會親自推薦大衛鮑爾斯的PHP Object-Oriented Solutions。這在我看來是針對新手的PHP中面向對象編碼的最佳介紹。您需要核心知識才能有效地部署編程模式。

如果你真的希望瞭解設計模式,我建議Design Patterns by Christoffer G. Lasater。我自己努力去理解這些模式,並且他以一種合理的可理解的方式向普通程序員解釋它們。它是爲Java編寫的,但差異並不大。