《PHP實(shí)戰(zhàn):PHP面向?qū)ο髮W(xué)習(xí)之parent::關(guān)鍵字》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):PHP面向?qū)ο髮W(xué)習(xí)之parent::關(guān)鍵字,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
PHP實(shí)戰(zhàn)前言
PHP實(shí)戰(zhàn)最近在做THINKPHP開發(fā)項(xiàng)目中,用到了 parent:: 關(guān)鍵字,實(shí)際上 parent::關(guān)鍵字 是PHP中常要用到的一個(gè)功能,這不僅僅是在 THINKPHP 項(xiàng)目開發(fā)中,即使是一個(gè)小型的企業(yè)站點(diǎn),也會(huì)有許多相同的function功能,我們可以封裝成一個(gè)父類 class,然后多個(gè)子類直接繼承公共部分父類.
PHP實(shí)戰(zhàn)PHP5中使用parent::來引用父類的方法.
PHP實(shí)戰(zhàn)parent:: 可用于調(diào)用父類中定義的成員方法.
PHP實(shí)戰(zhàn)parent::的追溯不僅于直接父類.
PHP實(shí)戰(zhàn)通過parent::調(diào)用父類方法
PHP實(shí)戰(zhàn)
<!-- 聲明一個(gè)員工類,經(jīng)理類繼承自員工類 -->
<?
class employee{
protected $sal=3000;
public function getSal(){
$this->sal = $this->sal + 1200;
return $this->sal ;
}
}
class Manager extends employee {
//如果想讓經(jīng)理在員工工資的基礎(chǔ)上多發(fā)1500元.
//必須先調(diào)用父類的getSal()方法.
public function getSal(){
parent::getSal();// 這里調(diào)用了父類的方法.
$this->sal = $this->sal + 1500;
return $this->sal ;
}
}
$emp = new employee();
echo "普通員工的工資是 " . $emp->getSal();
echo "<br>";
//xiariboke.com
$manager = new Manager();
echo "經(jīng)理的工資是: " . $manager->getSal();
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果:
PHP實(shí)戰(zhàn)普通員工的工資是 4200
PHP實(shí)戰(zhàn)經(jīng)理的工資是: 5700
PHP實(shí)戰(zhàn)父類的private屬性
PHP實(shí)戰(zhàn)這個(gè)東西解釋起來十分的不爽.
PHP實(shí)戰(zhàn)Private屬性是不能被繼承的,如果父類有私有的屬性.那么父類的方法只為父類的私有屬性服務(wù).
PHP實(shí)戰(zhàn)下面的例子看起來很奇怪,在子類中重新定義了一個(gè)屬性$sal,系統(tǒng)卻返回了父類的屬性.
PHP實(shí)戰(zhàn)
<?php
class employee{
private $sal=3000;
//protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
//這里返回的是父類的private屬性.
return parent::getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."<br>";
echo $manager->getSal();
echo "<br>";
echo "parent's \$sal ".$manager->getParentSal();
//xiariboke.com
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果:
PHP實(shí)戰(zhàn)PHP 5.2.9
PHP實(shí)戰(zhàn)3000
PHP實(shí)戰(zhàn)parent's $sal 3000
PHP實(shí)戰(zhàn)如果父類中的屬性被子類重寫了.結(jié)果是這樣的.注意 第5行的屬性定義變成了protected.
PHP實(shí)戰(zhàn)
<?php
class employee{
//private $sal=3000;
protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
//xiariboke.com
public function getParentSal(){
//這里返回的是父類的private屬性.
return parent::getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."<br>";
echo $manager->getSal();
echo "<br>";
echo "parent's \$sal ".$manager->getParentSal();
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果:
PHP實(shí)戰(zhàn)PHP 5.2.9
PHP實(shí)戰(zhàn)5000
PHP實(shí)戰(zhàn)parent's $sal 5000
PHP實(shí)戰(zhàn)子類中重寫的方法對(duì)當(dāng)前private有效.
PHP實(shí)戰(zhàn)
<?php
class employee{
private $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
private $sal=5000;
//重寫過的方法
public function getSal(){
return $this->sal;
}
public function getParentSal(){
//這里返回的是父類的private屬性.
return parent::getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."<br>";
echo $manager->getSal();
echo "<br>";
echo "parent's \$sal ".$manager->getParentSal();
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果:
PHP實(shí)戰(zhàn)PHP 5.2.9
PHP實(shí)戰(zhàn)5000
PHP實(shí)戰(zhàn)parent's $sal 3000
PHP實(shí)戰(zhàn)打開zend調(diào)試狀態(tài)看看,內(nèi)存中的情況.注意最下面,有兩個(gè)$sal .分別是 3000 和 5000 .
PHP實(shí)戰(zhàn)
<?php
class employee{
private $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
return $this->sal;
}
}
$manager = new Manager();
echo "PHP ".phpversion()."<br>";
echo $manager->getSal();
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果:
PHP實(shí)戰(zhàn)PHP 5.2.9
PHP實(shí)戰(zhàn)3000
PHP實(shí)戰(zhàn)將父類的屬性$sal 改成 protected ,子類重寫了父類的屬性.在內(nèi)存中只有一個(gè) $sal .
PHP實(shí)戰(zhàn)
<?php
class employee{
protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
return $this->sal;
}
}
$manager = new Manager();
echo "PHP ".phpversion()."<br>";
echo $manager->getSal();
?>
PHP實(shí)戰(zhàn)程序運(yùn)行結(jié)果:
PHP實(shí)戰(zhàn)PHP 5.2.9
PHP實(shí)戰(zhàn)5000
PHP實(shí)戰(zhàn)如果你學(xué)過java,你會(huì)覺得這一切都是很難理解的.
PHP實(shí)戰(zhàn)在Java中當(dāng)子類被創(chuàng)建時(shí),父類的屬性和方法在內(nèi)存中都被創(chuàng)建,甚至構(gòu)造函數(shù)也要被調(diào)用.
PHP實(shí)戰(zhàn)PHP5不是這樣,PHP5調(diào)用父類用的是parent:: 而不是 parent-> ,這足以說明PHP5不想在內(nèi)存中讓父類也被創(chuàng)建.PHP5想讓繼承變的比Java更簡(jiǎn)單.
PHP實(shí)戰(zhàn)適應(yīng)下就好.
PHP實(shí)戰(zhàn)這樣調(diào)用會(huì)讓PHP5.1.1溢出.新版不知道有沒有問題.
PHP實(shí)戰(zhàn)
<?php
class employee{
private $sal=3000;
public function getSal(){
return parent::$this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getSal(){
return parent::$this->getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."<br>";
echo $manager->getSal();
?>
PHP實(shí)戰(zhàn)第12行改成這樣就好了.注意比較.
PHP實(shí)戰(zhàn)return parent:: getSal();
PHP實(shí)戰(zhàn)這樣的代碼引起了遞歸操作,子類調(diào)用父類的方法,父類又調(diào)用子類方法.
PHP實(shí)戰(zhàn)return parent::$this->getSal();
PHP實(shí)戰(zhàn)總結(jié)
PHP實(shí)戰(zhàn)以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流.
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1937.html