溫振宏
摘要:在PHP程序設計語言中,public,protected,private是面向對象的三種訪問控制修飾符。其中,修飾符private修飾的類中成員屬性或方法的訪問限制最嚴格,只能在該類的內(nèi)部訪問。本文詳細地分析了private修飾符及構造器constructor的應用。
關鍵詞:PHP private constructor
中圖分類號:TP393 文獻標識碼:A 文章編號:1007-9416(2016)06-0181-01
Abstract:In PHP programming language, public, protected and private are three kinds of access control modifiers of object-oriented programming. The properties of a class modified by private can visit only inner of the class. Modifiers private and constructor are introduced in detail.
Key Words:PHP private constructor
1 Private 和Constructor介紹
PHP是一種HTML內(nèi)嵌式的,用于服務器端的腳本語言。PHP因開發(fā)周期短,穩(wěn)定安全,簡單易學,免費開源,良好的跨平臺等特性,成為全球最受歡迎的Web開發(fā)語言。PHP是一種面向對象的程序設計語言,面向對象的三大特性分別是封裝、繼承和多態(tài)[1]。
封裝,即把客觀事物封裝成類,類中的成員屬性或方法只讓可信的類或對象操作,對不可信的類進行信息隱蔽。對類中的成員屬性或方法能否具有訪問權限是通過訪問控制修飾符來完成的。PHP的訪問控制修飾符有三種,分別是public,protected和private。修飾符public修飾的類中成員的作用范圍可以是類的內(nèi)部、外部及子類。修飾符protected修飾的類中成員的作用范圍可以是類的內(nèi)部及子類。修飾符private修飾的類中成員的作用范圍只能是類的內(nèi)部。因此,private修飾的類中成員訪問限制最嚴格[2]。實際操作中,為了安全起見,我們習慣上會將類中的成員屬性全部用private進行修飾,對類外面的成員實現(xiàn)完全的信息隱蔽。而對類中private修飾的成員屬性的操作是通過構造器來實現(xiàn)的。構造器(也稱構造方法),在PHP中構造方法主要作用是類的初始化,即為類中的成員屬性賦值。它是在類的實例化(即創(chuàng)建對象)時自動調(diào)用的一種特殊的方法。
2 Private和Constructor舉例
聲明Person類,類中包含$name,$sex,$age屬性,全部用修飾符private修飾,做到對Person類外部成員完全進行信息隱蔽。對$name,$sex,$age屬性的操作通過構造方法construct()來實現(xiàn)。類中還包含輸出信息的printInfo()方法。
class Person{
private $name;
private $sex;
private $age;
function __construct($name,$sex,$age){
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function printInfo(){
echo $this->name;
echo $this->sex;
echo $this->age;
}
}
在Person類的外面,只需實例化對象傳遞具體的參數(shù)就可以為類中private修飾的成員屬性賦值。通過對象調(diào)用printInfo()方法就可以輸出信息。代碼如下:
$p1 = new Person(“person1”, “男性”, 25);
$p1->printInfo();
3 Constructor在子類中的使用
針對Person類,聲明子類Student,并讓子類Student繼承Person類。在子類Student中聲明自己的private成員屬性$school,并用構造方法進行子類的實例化。
class Student extends Person{
Private $school;
function __construct($name,$sex,$age,$school){
parent::__construct($name,$sex,$age);
$this->school = $school;
}
function printInfo(){
parent::printInfo();
echo $this->school;
}
}
子類Student無法訪問父類Person中的private修飾的屬性$name,$sex,$age。但可以在子類的構造方法中用parent::關鍵字訪問父類Person中的構造方法實現(xiàn)子類成員屬性$name,$sex,$age的初始化。同理,子類Student中的printInfo()方法也是通過parent::關鍵字實現(xiàn)訪問父類Person中的printInfo()方法,進而輸出子類的全部信息。代碼如下:
$student1 = new Student(“student1”,”男性”,20,”shool1”);
$student1->printInfo();
以上分析表明,private修飾符主要用于類的封裝,讓類中private修飾的成員對類外部成員完全進行信息隱蔽。而對類中private修飾的成員屬性可以通過構造方法進行賦值操作。如果子類中的構造方法或普通方法對父類的構造方法或普通方法進行了重寫,可以通過parent關鍵字訪問父類的構造方法或普通方法。
參考文獻
[1]高洛峰.LAMP兄弟連.細說PHP2[M].電子工業(yè)出版社,2012.10.
[2]何俊斌,王彩.從零開始學PHP第2版[M].電子工業(yè)出版社,2014.10.