PHP 物件導向小記

2021-05-02 12:04:24 字數 3080 閱讀 9740

//這個是php的新的特性,對於從c++也有類似的可以返回私有屬性的函式

接觸php5也有一段時間了,儘管php5出了很長時間了,但大家對php5還是不甚感冒。在我的blog裡講一天php5的東西,希望能夠對推動php5有所貢獻。

先來看乙個例子:

class userinfo

這個例子我想很多人在php4種也有用到,接下來給物件屬性進行付值:

$ouserinfo = new userinfo;

$ouserinfo->username = '木目';

$ouserinfo->password = '123456';

$ouserinfo->birthday = '1978-08-16';

$ouserinfo->age       = 27;

echo "使用者名稱:".$ouserinfo->username."

/n";

echo "密   碼:".$ouserinfo->password."

/n";

echo "生   日:".$ouserinfo->birthday."

/n";

上面的**在php4、php5種執行起來並不會發生任何問題。然而實際使用中我並不希望給物件沒有定義的屬性進行付之操作,我希望的是程式設計的人員能夠嚴格按照我所設計的結構進行,這個時候在php4中就無能為力了。如果你正在試用php5,那我告訴你乙個好訊息,這個問題在php5中的有了較好的解決,雖然並不完美。那就是__set和__get我們來利用php5的一些特性改寫一下上面的**看看會發生什麼問題:

class userinfo1=>)不存在";}

function __get($property))不存在";}

}$ouserinfo1 = new userinfo1;

$ouserinfo1->username = '木目子';

$ouserinfo1->password = '123456';

$ouserinfo1->birthday = '1978-08-16';

$ouserinfo1->age       = 27;

echo "使用者名稱:".$ouserinfo1->username."

/n";

echo "密   碼:".$ouserinfo1->password."

/n";

echo "生   日:".$ouserinfo1->birthday."

/n";

執行一下看看會發生什麼,仔細想想就不難發現__set和__get的作用了。但讓__set和__get的用途遠遠不止這些,這只是乙個很簡單的例子。

class userinfo2

$ouserinfo2 = new userinfo2;

$ouserinfo2->adata['username'] = '木目子';

$ouserinfo2->adata['password'] = '123456';

$ouserinfo2->adata['birthdat'] = '1978-08-16';

echo "使用者名稱:".$ouserinfo2->adata['username'] ."

/n";

echo "密   碼:".$ouserinfo2->adata['password'] ."

/n";

echo "生   日:".$ouserinfo2->adata['birthday'] ."

/n";

顯然,這段**會出錯的,因為adata是userinfo的私有屬性,不能直接在外部使用,那現在問題是必須要給adata進行付值,這個時候__set和__get就排上用場了:

class userinfo3

function __get($property)

}$ouserinfo3 = new userinfo3;

$ouserinfo3->adata['username'] = '木目子';

$ouserinfo3->adata['password'] = '123456';

$ouserinfo3->adata['birthdat'] = '1978-08-16';

echo "使用者名稱:".$ouserinfo3->adata['username'] ."

/n";

echo "密   碼:".$ouserinfo3->adata['password'] ."

/n";

echo "生   日:".$ouserinfo3->adata['birthday'] ."

/n";

再來執行一下看看,ok搞定。

注意php是弱類語言。他不需要事先定義變數的型別也不須事先宣告才可以用。

所以$this->b=12 相當於你var $b=12。然後直接呼叫像你寫的 $this->b;

靜態函式的引用必須用self::$a1;

如果是在類外面用就:echo(abc::$a1);

靜態函式是這個類的函式,而不是屬於單個物件例項的函式。既然不是例項,那個$this指向誰? 所以說經態函式裡是不能用$this的

首先我們要明確一點,self是指向類本身,也就是self是不指向任何已經例項化的物件,一般self使用來指向類中的靜態變數。

我們看,上面的類分別在11行和20行使用了this指標,那麼當時this是指向誰呢?其實this是在例項化的時候來確定指向誰,比如第一次例項化物件的時候(25行),那麼當時this就是指向$nameobject物件,那麼執行18行的列印的時候就把print( $this->name ),那麼當然就輸出了"heiyeluren"。第二個例項的時候,print( $this->name )變成了print( $nameobject2->name ),於是就輸出了"php5"。所以說,this就是指向當前物件例項的指標,不指向任何其他物件或類

我們知道parent是指向父類的指標,一般我們使用parent來呼叫父類的建構函式

我 們注意這麼幾個細節:成員屬性都是public的,特別是父類的,是為了供繼承類通過this來訪問。我們注意關鍵的地方,

第25行: parent::__construct( "heiyeluren" ),這時候我們就使用parent來呼叫父類的建構函式進行對父類的初始化,因為父類的成員都是public的,於是我們就能夠在繼承類中直接使用 this來呼叫。

PHP物件導向

1 什麼是物件導向 起初,物件導向 是專指在程式設計中採用封裝 繼承 抽象等設計方法。可是,這個定義顯然不能再適合現在情況。物件導向的思想已經涉及到軟體開發的各個方面。如 物件導向的分析 ooa,object oriented analysis 物件導向的設計 ood,object oriented...

php物件導向

smarty自定義函式 作用 用於在模板被執行時為模板變數賦值 函式名稱 assign 引數 var 宣告變數名稱 字串 value 給該變數賦值 字串 tpl assign title this is title 實現自定義函式有兩種 1.註冊自定義函式 3.版本不支援 tpl register ...

php物件導向

一 寫出php的public protected private三種訪問控制模式的區別 public 公有,任何地方都可以訪問 protected 繼承,只能在本類或子類中訪問,在其他地方不允許訪問 private 私有,只能在本類中訪問,在其他地方不允許訪問 二 請用單態設計模式方法設計類滿足要求...