php面向?qū)ο笕ヂ?(九)訪問(wèn)類型
更新時(shí)間:2009年09月30日 22:29:08 作者:
類型的訪問(wèn)修飾符允許開(kāi)發(fā)人員對(duì)類成員的訪問(wèn)進(jìn)行限制,這是PHP5 的新特性,但卻是OOP 語(yǔ)言的一個(gè)好的特性。而且大多數(shù)OOP 語(yǔ)言都已支持此特性。
13.訪問(wèn)類型
類型的訪問(wèn)修飾符允許開(kāi)發(fā)人員對(duì)類成員的訪問(wèn)進(jìn)行限制,這是PHP5 的新特性,但卻
是OOP 語(yǔ)言的一個(gè)好的特性。而且大多數(shù)OOP 語(yǔ)言都已支持此特性。PHP5 支持如下3 種訪
問(wèn)修飾符
public (公有的、默認(rèn)的),private (私有的)和protected (受保護(hù)的)三種。
public 公有修飾符,類中的成員將沒(méi)有訪問(wèn)限制,所有的外部成員都可以訪問(wèn)(讀和寫(xiě))
這個(gè)類成員(包括成員屬性和成員方法),在PHP5 之前的所有版本中,PHP 中類的成員都是
public 的,而且在PHP5 中如果類的成員沒(méi)有指定成員訪問(wèn)修飾符,將被視為public。
例:public $name;
public function say(){};
private 私有修改符,被定義為private 的成員,對(duì)于同一個(gè)類里的所有成員是可見(jiàn)的,即
是沒(méi)有訪問(wèn)限制;但對(duì)于該類的外部代碼是不允許改變甚至讀操作,對(duì)于該類的子類,也不
能訪問(wèn)private 修飾的成員。
例:private $var1 = ‘A'; //屬性
private function getValue(){} //函數(shù)
protected 保護(hù)成員修飾符,被修飾為protected 的成員不能被該類的外部代碼訪問(wèn)。但是
對(duì)于該類的子類有訪問(wèn)權(quán)限,可以進(jìn)行屬性、方法的讀及寫(xiě)操作,該子類的外部代碼包括其的
子類都不具有訪問(wèn)其屬性和方法的權(quán)限。
例:protected $name;
protected function say(){};
private protected public
同一個(gè)類中 √ √ √
類的子類中 √ √
所有的外部成員 √
代碼片段
<?php
/**
* Define MyClass
*/
class MyClass{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello(){
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; //Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass{
//We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello(){
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; //Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, not Private
?>
代碼片段
<?php
/**
* Define MyClass
*/
class MyClass{
// Contructors must be public
public function __construct() { }
// Declare a public method
public function MyPublic() { }
// Declare a protected method
protected function MyProtected() { }
// Declare a private method
private function MyPrivate() { }
// This is public
function Foo() {
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); //Works
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Public, Protected and Private work
/**
* Define MyClass2
*/
class MyClass2 extends MyClass{
// This is public
function Foo2(){
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Fatal Error
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Public and Protected work, not Private
?>
另外在子類覆蓋父類的方法時(shí)也要注意一點(diǎn),子類中方法的訪問(wèn)權(quán)限一定不能低于父類
被覆蓋方法的訪問(wèn)權(quán)限,也就是一定要高于或等于父類方法的訪問(wèn)權(quán)限。
例如,如果父類方法的訪問(wèn)權(quán)限是protected 那么子類中要覆蓋的權(quán)限就要是protected
和public,如果父類的方法是public 那么子類中要覆蓋的方法只能也是public,總之子類中的
方法總是要高于或等于父類被覆蓋方法的訪問(wèn)權(quán)限。
類型的訪問(wèn)修飾符允許開(kāi)發(fā)人員對(duì)類成員的訪問(wèn)進(jìn)行限制,這是PHP5 的新特性,但卻
是OOP 語(yǔ)言的一個(gè)好的特性。而且大多數(shù)OOP 語(yǔ)言都已支持此特性。PHP5 支持如下3 種訪
問(wèn)修飾符
public (公有的、默認(rèn)的),private (私有的)和protected (受保護(hù)的)三種。
public 公有修飾符,類中的成員將沒(méi)有訪問(wèn)限制,所有的外部成員都可以訪問(wèn)(讀和寫(xiě))
這個(gè)類成員(包括成員屬性和成員方法),在PHP5 之前的所有版本中,PHP 中類的成員都是
public 的,而且在PHP5 中如果類的成員沒(méi)有指定成員訪問(wèn)修飾符,將被視為public。
例:public $name;
public function say(){};
private 私有修改符,被定義為private 的成員,對(duì)于同一個(gè)類里的所有成員是可見(jiàn)的,即
是沒(méi)有訪問(wèn)限制;但對(duì)于該類的外部代碼是不允許改變甚至讀操作,對(duì)于該類的子類,也不
能訪問(wèn)private 修飾的成員。
例:private $var1 = ‘A'; //屬性
private function getValue(){} //函數(shù)
protected 保護(hù)成員修飾符,被修飾為protected 的成員不能被該類的外部代碼訪問(wèn)。但是
對(duì)于該類的子類有訪問(wèn)權(quán)限,可以進(jìn)行屬性、方法的讀及寫(xiě)操作,該子類的外部代碼包括其的
子類都不具有訪問(wèn)其屬性和方法的權(quán)限。
例:protected $name;
protected function say(){};
private protected public
同一個(gè)類中 √ √ √
類的子類中 √ √
所有的外部成員 √
代碼片段
復(fù)制代碼 代碼如下:
<?php
/**
* Define MyClass
*/
class MyClass{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello(){
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; //Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass{
//We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello(){
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; //Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, not Private
?>
代碼片段
復(fù)制代碼 代碼如下:
<?php
/**
* Define MyClass
*/
class MyClass{
// Contructors must be public
public function __construct() { }
// Declare a public method
public function MyPublic() { }
// Declare a protected method
protected function MyProtected() { }
// Declare a private method
private function MyPrivate() { }
// This is public
function Foo() {
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); //Works
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Public, Protected and Private work
/**
* Define MyClass2
*/
class MyClass2 extends MyClass{
// This is public
function Foo2(){
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Fatal Error
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Public and Protected work, not Private
?>
另外在子類覆蓋父類的方法時(shí)也要注意一點(diǎn),子類中方法的訪問(wèn)權(quán)限一定不能低于父類
被覆蓋方法的訪問(wèn)權(quán)限,也就是一定要高于或等于父類方法的訪問(wèn)權(quán)限。
例如,如果父類方法的訪問(wèn)權(quán)限是protected 那么子類中要覆蓋的權(quán)限就要是protected
和public,如果父類的方法是public 那么子類中要覆蓋的方法只能也是public,總之子類中的
方法總是要高于或等于父類被覆蓋方法的訪問(wèn)權(quán)限。
您可能感興趣的文章:
- PHP標(biāo)準(zhǔn)類(stdclass)用法示例
- 解析PHP將對(duì)象轉(zhuǎn)換成數(shù)組的方法(兼容多維數(shù)組類型)
- 常用的php對(duì)象類型判斷
- PHP面向?qū)ο箢愋图s束用法分析
- PHP中數(shù)據(jù)類型轉(zhuǎn)換的三種方式
- 淺析php數(shù)據(jù)類型轉(zhuǎn)換
- 淺談PHP強(qiáng)制類型轉(zhuǎn)換,慎用!
- PHP 變量類型的強(qiáng)制轉(zhuǎn)換
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)內(nèi)置標(biāo)準(zhǔn)類,普通數(shù)據(jù)類型轉(zhuǎn)為對(duì)象類型示例
相關(guān)文章
PHP5權(quán)威編程閱讀學(xué)習(xí)筆記 附電子書(shū)下載
PHP5中,使用新的統(tǒng)一的構(gòu)造函數(shù)命名方式:__construct(),當(dāng)然,使用類名同樣也是可以的2012-07-07
PHP的mysqli_stmt_init()函數(shù)講解
今天小編就為大家分享一篇關(guān)于PHP的mysqli_stmt_init()函數(shù)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
PHP函數(shù)學(xué)習(xí)之PHP函數(shù)點(diǎn)評(píng)
PHP函數(shù)使用說(shuō)明,應(yīng)用舉例,精簡(jiǎn)點(diǎn)評(píng),希望對(duì)您學(xué)習(xí)php有所幫助2012-07-07
不用數(shù)據(jù)庫(kù)的多用戶文件自由上傳投票系統(tǒng)(1)
不用數(shù)據(jù)庫(kù)的多用戶文件自由上傳投票系統(tǒng)(1)...2006-10-10

