-
-
- class employee{
- private $sal=3000;
- //protected $sal=3000;
- public function getSal(){
- return $this->sal;
- }
- }
- class Manager extends employee {
- protected $sal=5000;
-
- protected $sal=5000;
-
public function getParentSal(){
- //這裡回傳的是父類別的private屬性.
- return parent::getSal();
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal();
- echo "
";
- echo "parent's $sal ".$manager->getParentSal();
?>
複製程式碼
程式運作結果:
PHP 5.3.8
3000
parent's $sal 3000
如果父類別中的屬性被子類別重寫了。
結果是這樣的。注意 第5行的屬性定義變成了protected。
-
-
-
-
- class employee{
- //private $sal=3000;protected 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()."
";
- echo $manager->getSal();
- echo "";
- echo "parent's $sal ".$manager->getParentSal();
- ?>
複製代碼
程式運行結果:
PHP 5.3.8
5000
parent's $sal 5000
第一列子中父類別的private $sal沒有被重寫所以$manager->getSal()這個父類別的方法呼叫的是父類別自己的私有屬性$sal 此時記憶體中有兩個$ sal
第二個列子中父類別的protected $sal被重寫$manager->getSal()這個父類別的方法呼叫已經被重寫的$sal 父類別的$sal在記憶體中是不存在的此時記憶體中只有一個$sal
接下來看第三個列子
子類別中重寫的方法對目前private有效。
-
-
-
- class employee{
- private $sal=3000;
- publicloyee{
- private $sal=3000;
- public function getSal(){ function
- 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()."
";
- echo $manager->getSal();
- echo "
";
echo "parent's $sal ".$manager->getParentSal(); ?>
複製程式碼
運行結果
PHP 5.3.8
5000
parent's $sal 3000
這個列子中子類別重寫getSal()方法 所以他呼叫的是子類別的屬性
如果你註解子類別的這一行
//private $sal=5000;
你會發現一個錯誤:Notice: Undefined property: Manager::$sal in E:wampwwwoo2-52-5-3.php on line 14
如果註解掉12行的子類別重寫方法 那麼echo $manager->getSal();得到的結果是 父類別的私有屬性$sal 3000
開啟zend調試狀態看看,記憶體中的情況。注意最下面,有兩個$sal 。分別是 3000 和 5000 。
-
-
-
-
-
- class employee{
- private $sal=3000;
- public function getSal(){
- ->sal;
- }
- }
- class Manager extends employee {
- protected $sal=5000;
- public function getParentSal(){
- return $this->sal;}
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
echo $manager->getSal(); ?>
複製程式碼
程式運作結果:
PHP 5.3.8
3000
將父類別的屬性$sal 改成 protected ,子類別重寫了父類別的屬性。在記憶體中只有一個 $sal 。
-
-
-
-
- class employee{
- protected $sal=3000;
- public function getSal(){sal;
- }
- }
- class Manager extends employee {
- protected $sal=5000;
- public function getParentSal(){
- return $this->sal;}
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal();
- ?>
複製程式碼
程式運作結果:
PHP 5.3.8
5000
注意:
PHP5呼叫父類別用的是parent:: 而不是 parent-> ,這足以說明PHP5不想在記憶體中讓父類別也被創建。
PHP5想讓繼承變的比Java簡單。
|