PHP5權威程式設計學習筆記

2022-02-03 16:05:21 字數 3467 閱讀 8828

php4中,不使用__construct()作為建構函式的名字,必須使用類的名字定義乙個方法,就像在c++中一樣。

php5中,使用新的統一的建構函式命名方式:__construct(),當然,使用類名同樣也是可以的。

但是,你如果兩個同時使用的話,系統缺省會使用__construct()的形式。

<?php

class

person

//php5推薦使用的方法

public

function

__construct()

public

function

say()

}$p1=new

person();

?>

在建構函式中不能返回值,所以從建構函式內產生乙個錯誤最常用的做法就是丟擲乙個異常。

**如下:

<?php

class

person

else

}catch (exception$e)}}

$p1=new person(121);

?>

訪問控制

物件屬性的訪問保護是oop的乙個關鍵範例

public:可以在任何地方被訪問

protected:類成員可以被其所在類的子類和父類從物件內部的方法訪問

也就是兩個類都只能看到自己的私有屬性,私有成員之間是沒有關係的。

例子:

<?php/**

* define myclass */

class

myclass

}$obj = new

myclass();

echo

$obj->public; //

這行能被正常執行

echo

$obj->protected; //

這行會產生乙個致命錯誤

echo

$obj->private; //

這行也會產生乙個致命錯誤

$obj->printhello(); //

輸出 public、protected 和 private/**

* define myclass2 */

class myclass2 extends

myclass

}$obj2 = new

myclass2();

echo

$obj->public; //

這行能被正常執行

echo

$obj2->private; //

未定義 private

echo

$obj2->protected; //

這行會產生乙個致命錯誤

$obj2->printhello(); //

輸出 public、protected2,但不會輸出 private

注意:類中的方法都必須使用關鍵字public、protected 或 private 進行定義。如果沒有設定這些關鍵字,則該方法會被設定成預設的 public。

靜態方法

靜態方法可以不建立物件例項就通過 類名::靜態方法 來呼叫,也可以在乙個物件例項中通過$this->靜態方法或self::靜態方法來呼叫。

<?php

class

foo}

$obj=new

foo();

echo

$obj->staticvalue();//

方式一echo foo::staticvalue();//

方式二?>

轉殖物件

在php4中,new乙個物件的時候,返回的是「物件本身」

在php5中,new乙個物件的時候,返回的是「指向物件的控制代碼」

這意味著在php5中,將物件例項($obj1)賦值給另乙個變數($obj2)的時候,兩個物件都是指向同一塊記憶體區域。

比如 :

<?php

class

test

$obj1=new

test();

$obj1->str="obj1";

$obj2= $obj1

;

$obj2->str="obj2";

echo

$obj1->str;//

將輸出「obj1」

?>

由於$obj1和$obj2指向的是同一塊記憶體區域,因此使用任何乙個物件修改其中的成員變數的值的時候,都會影響到另乙個物件。

但是在有些時候,我們確實需要複製乙個物件的拷貝(兩塊相互獨立的記憶體區域),這時候可以使用語言命令clone

參考下面的例子;

<?php

class

test

$obj1=new

test();

$obj1->str="obj1";

$obj2= clone

$obj1

;

$obj2->str="obj2";

echo

$obj1->str;//

將輸出「obj2」

?>

parent::self::

self::指向當前類,而且通常用來訪問靜態成員,方法和常量

parent::指向父類,而且它經常被用來呼叫父類的建構函式和方法,也可以用來訪問父類的成員和常量

注意:你應該使用parent::而不是父類的某個具體的名字,因為這樣可以令你方便的更改你的類的層次。

例子:

<?php

class

father

}class son extends

father

}$son=new

son();

?>

結果:呼叫父類的建構函式

呼叫子類的建構函式

推薦使用方式一,原因上面已經說了。

instanceof例項

<?php

class

rectangle

class square extends

rectangle

class

circle

function checkifrectangle($shape

)else

}checkifrectangle(

new square());//

輸出:square

checkifrectangle(

new circle());//

輸出:該物件不是rectangle類的例項

?>

注:__class__是乙個特殊的常量,用來儲存當前類的名字

PHP5權威程式設計 學習筆記

php5權威程式設計 一 如何嵌入到html當中 print hello,world 執行的輸出 如果php有輸出 替換掉php 二 注釋 1 2 3 三 變數 陣列元素或物件的屬性 標誌當字首,以字母或下劃線開始。php不支援全域性變數。變數都被限制到本地範圍,而且如果是在函式中建立的,它們的生存...

php5 學習記錄 2

一 過載效能 1 屬性和方法的過載 php 允許通過實現特殊的 方法對屬性的訪問和方法的呼叫進行過載,這些 方法將在相關的屬性或者方法不存在時呼叫。這種特性讓你在中端這些動作並定義你自己的功能時獲得巨大的靈活性。你可以實現下面的方法原型 function get property 傳遞屬性的名字,並...

PHP5學習筆記 用 call 實現方法過載

今天在網上發現了一片好文章,介紹 call 方法。依靠這個方法可以實現方法過載,這是找了好久的東西了。發在這裡,算作筆記。php5 的物件新增了乙個專用方法 call 這個方法用來監視乙個物件中的其它方法。如果你試著呼叫乙個物件中不存在的方法,call 方法將會被自動呼叫。例七 call class...