PHP實踐之路(九)類與物件(2)
類與物件(2)
1、建構函式
a、建構函式的作用主要是初始化物件資訊,每次建立新物件時都會呼叫建構函式
b、建構函式模式為
void __construct($args)
c、為了實現向後相容性,如果 PHP 5 在類中找不到 __construct() 函式,它就會嘗試尋找舊式的建構函式,也就是和類同名的函式
d、如果子類中定義了建構函式則不會隱式呼叫其父類的建構函式。要執行父類的建構函式,需要在子類的建構函式中呼叫 parent::__construct()。子類和父類的說法是在繼承中有的,繼承我們將在後面討論(這個實驗我們將在繼承中體現)
我們來舉個例子
<?php
//換行輸出
function println($var){
echo $var;
echo "<br />";
}
//賬戶
class Account{
private $username;
private $password;
//建構函式
function __construct($name,$pass){
println("execute construct...");
$this->username=$name;
$this->password=$pass;
}
function printInfo(){
println("username:".$this->username);
println("password:".$this->password);
}
}
$account=new Account("cyxl","123"); //輸出:execute construct...
$account->printInfo();
/**輸出
username:cyxl
password:123
*/
class Account2{
private $username;
private $password;
//舊式同名建構函式
function Account2($name,$pass){
println("execute construct...");
$this->username=$name;
$this->password=$pass;
}
function printInfo(){
println("username:".$this->username);
println("password:".$this->password);
}
}
$account=new Account2("jack","123"); //輸出:execute construct...
$account->printInfo();
/**輸出
username:jack
password:123
*/
?>
2、解構函式
a、解構函式會在到某個物件的所有引用都被刪除或者當物件被顯式銷燬時執行(自PHP5開始引入解構函式)
b、父類的解構函式不會被引擎暗中呼叫。要執行父類的解構函式,必須在子類的解構函式體中顯式呼叫 parent::__destruct()。(這個實驗我們將在繼承中體現)
c、解構函式即使在使用exit()終止指令碼執行時也會被呼叫。在解構函式中 呼叫exit()將會中止其餘關閉操作的執行
實驗時間
<?php
//換行輸出
function println($var){
echo $var;
echo "<br />";
}
//賬戶
class Account{
private $username;
private $password;
//建構函式
function __construct($name,$pass){
println("execute construct...");
$this->username=$name;
$this->password=$pass;
}
function printInfo(){
println("username:".$this->username);
println("password:".$this->password);
}
function __destruct(){
println("execute destruct...");
}
}
$account=new Account("cyxl","123"); //輸出:execute construct...
///exit(); //如果此處呼叫exit()函式,指令碼將終止執行,但物件的解構函式還是會執行輸出:execute destruct...
$account->printInfo();
/**輸出
username:cyxl
password:123
*/
//指令碼執行完後,系統自動呼叫解構函式輸出:execute destruct...
?>
3、繼承
a、繼承也就是子類繼承自父類,子類將會繼承父類的所有公有和保護方法,但是子類的方法會覆蓋父類的方法。這個可以聯絡實際情況加以理解
b、一個子類只可以繼承一個父類
c、使用final關鍵字修飾的類不能被繼承,使用final修飾的方法不能被覆蓋
好了,我們做做實驗吧
<?php
//換行輸出
function println($var){
echo $var;
echo "<br />";
}
class Father{
private $name;
protected $money;
public $friends;
//建構函式初始化物件
function __construct(){
println("father construct executed...");
$this->name="father";
$this->money=10000.0; //父親的初始財富值,也許是他爸爸留給他的
$this->friends=array("jack","lily");
}
function work(){
println("father working..");
$this->money+=10; //父親通過工作掙錢
}
function printInfo(){
println("name:".$this->name);
println("money:".$this->money);
echo "friends:";
foreach($this->friends as $friend){
echo $friend." ";
}
echo "<br />";
}
function __destruct(){
println("father gone");
}
}
class Sun extends Father{
private $name;
private $other;
function __construct(){
println("sun construct executed...");
parent::__construct(); //如果沒有這行顯示的呼叫父類的建構函式,那麼父類的建構函式將不會執行
$this->name="sun"; //兒子自己的名字
$this->other="somthing else";
}
function work(){
println("sun working..");
$this->money+=20; //兒子繼承了父親的財產,通過自己掙錢使財富值增加了(兒子掙錢的能力比父親強)
}
//兒子有自己的朋友
function makeFriends(){
$this->friends=array("mike","tom","bake");
}
function printInfo(){
println("name:".$this->name);
println("money:".$this->money);
println("other:".$this->other);
echo "friends:";
foreach($this->friends as $friend){
echo $friend." ";
}
echo "<br />";
}
function __destruct(){
parent::__destruct();
println("sun gone");
}
}
//定義父親物件
$father=new Father();
$father->work();
$father->printInfo();
println("========================");
//定義兒子物件,很多屬性都繼承自父親
$sun=new Sun();
$sun->printInfo();
println("========================");
$sun->work();
$sun->makeFriends();
$sun->printInfo();
println("========================");
//接下來是系統自動銷燬物件
?>
以上程式的輸出結果為
father construct executed...
father working..
name:father
money:10010
friends:jack lily
========================
sun construct executed...
father construct executed...
name:sun
money:10000
other:somthing else
friends:jack lily
========================
sun working..
name:sun
money:10020
other:somthing else
friends:mike tom bake
========================
father gone
sun gone
father gone
版權宣告:本文為博主原創文章,未經博主允許不得轉載。
相關文章
- PHP實踐之路(十)類與物件(3)PHP物件
- PHP實踐之路(八)類與物件(1)PHP物件
- 實驗2 類與物件物件
- 深入PHP物件導向、模式與實踐PHP物件模式
- PHP實踐之路(七)PHP函式PHP函式
- php.類與物件PHP物件
- PHP實踐之路(目錄索引)PHP索引
- PHP實踐之路(六)控制結構PHP
- PHP 手冊 (類與物件) 學習筆記九:Static(靜態)關鍵字PHP物件筆記
- PHP實踐之路(三)PHP初探資料型別PHP資料型別
- PHP實踐之路(四)PHP中常量和變數PHP變數
- 實驗2 類和物件物件
- PHP實踐之路(二)apache虛擬主機配置PHPApache
- PHP 函式庫精講之類與物件PHP函式物件
- PHP 無限級分類最佳實踐PHP
- PHP 手冊 (類與物件) 學習筆記三:類常量PHP物件筆記
- PHP 手冊 (類與物件) 學習筆記十:抽象類PHP物件筆記抽象
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- PHP 手冊 (類與物件) 學習筆記七:物件繼承PHP物件筆記繼承
- PHP 物件導向 final類與final方法PHP物件
- JavaScript 建立物件模式與最佳實踐JavaScript物件模式
- 物件與類物件
- 類與物件物件
- ⦁ 類與物件物件
- 測試與流量博弈的實踐之路 - 王勝
- PHP 與 UTF-8 的最佳實踐PHP
- PHP 與 UTF-8的最佳實踐PHP
- 類與物件3物件
- OC:類與物件☀️物件
- Swift:類與物件Swift物件
- PHP 物件導向 (十一)反射類PHP物件反射
- PHP 手冊 (類與物件) 學習筆記二:屬性PHP物件筆記
- JavaScript 建立物件: 方法一覽與最佳實踐JavaScript物件
- Java物件導向——類與物件Java物件
- oracle,db2,mysql類比之九備份與恢復OracleDB2MySql
- PHP 手冊 (類與物件) 學習筆記四:類的自動載入PHP物件筆記
- 《軟體效能測試、分析與調優實踐之路》(第2版) PPT課件流出
- Javascript 類與靜態類的實現-js物件導向JavaScriptJS物件