PHP 類與物件導向 量略大

2021-07-24 09:41:39 字數 4090 閱讀 3664

定義乙個類&例項化乙個物件

class

car

}$car = new car();

//也可以採用變數來建立

$classname = 'car';

$car = new

$classname();

php類和物件之類的屬性

在類中定義的變數稱之為屬性

屬性宣告是由關鍵字 public,protected 或者 private 開頭,後面跟乙個普通的變數宣告來組成。

屬性的變數可以設定初始化的預設值,預設值必須是常量

public:公開的

protected:受保護的

private:私有的

class car

}

預設都為public,外部可以訪問。一般通過->物件操作符來訪問物件的屬性或者方法

對於靜態屬性則使用::雙冒號進行訪問。

當在類成員方法內部呼叫的時候,可以使用$this偽變數呼叫當前物件的屬性。

php類和物件之定義類的方法

在面向過程的程式設計中function叫做函式,在物件導向中function則被稱之為方法。

同屬性一樣,類的**方法**也具有public,protected 以及 private 的訪問控制。

訪問控制的關鍵字代表的意義為:

public:公開的

protected:受保護的

private:私有的

class

car

​}$car = new car();

echo

$car->getname();

使用關鍵字static修飾的,稱之為靜態方法,靜態方法不需要例項化物件,可以通過類名直接呼叫,操作符為雙冒號::。

class

car

​}echo car::getname(); //結果為「汽車」

php類和物件之建構函式和析構函式

php5可以在類中使用__construct()定義乙個建構函式,具有建構函式的類,會在每次物件建立的時候呼叫該函式,因此常用來在物件建立的時候進行一些初始化工作。

class

car

}$car = new car(); //例項化的時候 會自動呼叫建構函式__construct,這裡會輸出乙個字串

在子類中如果定義了__construct則不會呼叫父類的__construct,如果需要同時呼叫父類的建構函式,需要使用parent::__construct()顯式的呼叫。

class

car

}class

truck

extends

car

}$car = new truck();

同樣,php5支援析構函式,使用__destruct()進行定義,析構函式指的是當某個物件的所有引用被刪除,或者物件被顯式的銷毀時會執行的函式。

class

car

function

__destruct

() }

$car = new car(); //例項化時會呼叫建構函式

echo

'使用後,準備銷毀car物件 \n';

unset($car); //銷毀時會呼叫析構函式

當php**執行完畢以後,會自動**與銷毀物件,因此一般情況下不需要顯式的去銷毀物件。

php類和物件之static靜態關鍵字

靜態屬性方法可以在不例項化類的情況下呼叫,直接使用類名::方法名的方式進行呼叫。靜態屬性不允許物件使用->操作符呼叫。

class

car

}echo car::getspeed(); //呼叫靜態方法

靜態方法也可以通過變數來進行動態呼叫

$func = 'getspeed';

$classname = 'car';

echo

$classname::$func(); //動態呼叫靜態方法

靜態方法中,$this偽變數不允許使用。可以使用self,parent,static在內部呼叫靜態方法與屬性。

class

car

public

static

function

speedup

() }

class

bigcar

extends

car

}bigcar::start();

echo bigcar::getspeed();

php類和物件之訪問控制

訪問控制通過關鍵字public,protected和private來實現。

被定義為公有的類成員可以在任何地方被訪問。

被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。

被定義為私有的類成員則只能被其定義所在的類訪問。

類屬性必須定義為公有、受保護、私有之一。為相容php5以前的版本,如果採用 var 定義,則被視為公有。

class

car

類中的方法可以被定義為公有、私有或受保護。如果沒有設定這些關鍵字,則該方法預設為公有。

class

car

}

php類和物件之過載

php中的過載指的是動態的建立屬性與方法,是通過魔術方法來實現的。屬性的過載通過__set,__get,__isset,__unset來分別實現對不存在屬性的賦值、讀取、判斷屬性是否設定、銷毀屬性。

class

car

public

function

__get

($key)

return

null;

}public

function

__isset

($key)

return

false;

}public

function

__unset

($key)

}$car = new car();

$car->name = '汽車'; //name屬性動態建立並賦值

echo

$car->name;

方法的過載通過__call來實現,當呼叫不存在的方法的時候,將會轉為引數呼叫__call方法,當呼叫不存在的靜態方法時會使用__callstatic過載。

class

car

}}$car = new car();

$car->speedup(); //呼叫不存在的方法會使用過載

echo

$car->speed;

如果建構函式定義成了私有方法,則不允許直接例項化物件了,這時候一般通過靜態方法進行例項化,在設計模式中會經常使用這樣的方法來控制物件的建立,比如單例模式只允許有乙個全域性唯一的物件。

class

car

private

static

$_object = null;

public

static

function

getinstance

() return

self::$_object;

}}//$car = new car(); //這裡不允許直接例項化物件

$car = car::getinstance(); //通過靜態方法來獲得乙個例項

php物件導向程式設計 類與物件

1 類和物件的區別與聯絡 1.類是抽象的,概念的,代表一類事物,比如人類,貓類 2.物件是具體的,實際的,代表乙個具體的事物 3.類是物件的模板,物件是類的乙個個體例項 2 類與物件例項 建立乙個cat類 class cat 建立乙個物件 cat1 通過cat類建立乙個cat1物件 cat1 new...

PHP物件導向 類

created by phpstorm.user 63448 date 2018 5 6 time 9 44 類 相似的資料和資料操作的封裝 class 成員量 普通的量加上一定的修飾就變成了成員量 public,protected,private 例項化 類建立特例的過程 例項化乙個物件 new ...

php 12 類與物件(物件導向)

物件導向是為了更大規模合作,量大的情況 基礎語法 class name public functions2 name new name 根據name類例項化物件 var dump name object name 1 呼叫物件屬性 echo name s1 0echo name s2 1 呼叫物件方...