亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

我在父類中定義了,$height私有屬性,但是還能在外邊被訪問到

<?php


class Human{

public $name ;

private $height ;

protected $weight;

private $ishungry=true;

public function eat($food){

echo $this->name."'s eating ".$food."\n";}

public function info(){

echo "hunman:".$this->name.";".$this->height.";".

$this->ishungry."\n";

}

}


class NbaPlayer extends Human{

private $age="40";

function __construct($name,$height,$weight,$team,$playernumber){

echo "in nbaplayer construct\n";

$this->name=$name;

$this->height=$height;

$this->weight=$weight;

$this->team=$team;

$this->playnumber=$playernumber;

echo $this->height."\n";

echo $this->weight."\n";

//設置為私有屬性但是外部可以調用private $height ;


}

//定義方法

public function run(){

echo "Running\n";

}

public function jump(){

echo "Jumping\n";

}

public function dribble(){

echo "Dribbling\n";

}

public function shoot(){

echo "Shooting\n";

}

public function dunk(){

echo "Dunking\n";

}

public function pass(){

echo "passing\n";

}

public function getage(){

echo $this->name."'s age is".($this->age-5);

}


}

$jordan= new NbaPlayer('jordan','198cm','98kg','bull','23');

echo $jordan->height."</br>";

//echo $jordan->weight."</br>";

echo $jordan->ishungry."</br>";

?>


正在回答

2 回答

????父類Human中定義的$weight變量是protected訪問權限的,所以父類中的$weight是可以被繼承的,在子類NbaPlayer構造方法中并沒有新建的$weight的這個屬性,而是調用的的父類的$weight屬性。所以你在外部調用$jordan->weight輸出的時候由于protected訪問權限不夠所以是不能輸出的。

????你可以在$jordan= new NbaPlayer('jordan','198cm','98kg','bull','23');

????這一行代碼后面加一行代碼:var_dump($jordan);查看對象的結構。然后你會看到如下輸出:

http://img1.sycdn.imooc.com//5811dd250001a97c14310084.jpg

????注意看,里面有一個["height":"Human":private]=> NULL,還有一個["height"]=> string(5) "198cm"。前者是父類中的height,但是由于訪問權限是private所以不能訪問,后者則是在構造函數中新建的$height。再看weight只有一個,["weight":protected]=> string(4) "98kg" ,是從父類中繼承的,protected訪問權限的。


0 回復 有任何疑惑可以回復我~
#1

慕粉3564441 提問者

這就說明要是能繼承,它就先繼承,如果不能繼承父類,他就自己構造一個函數。這個要是這么理解就OK了...
2016-10-29 回復 有任何疑惑可以回復我~

你在子類NbaPlayer 的構造方法中這一行:$this->height=$height;

這里$this->height其實并不是父類中的$height屬性,而是在子類NbaPlayer?中新建了一個與父類中$height屬性同名的另一個屬性,兩個屬性是不一樣的。

在子類NbaPlayer?構造方法中新建的的$height屬性是默認的訪問權限,所以在你調用這一行:echo $jordan->height."</br>";的時候也能輸出。

1 回復 有任何疑惑可以回復我~
#1

慕粉3564441 提問者

但是echo $jordan->weight."</br>";這個不能輸出啊,同樣是在子類NbaPlayer 構造方法中新建的$weight的這個屬性
2016-10-27 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

我在父類中定義了,$height私有屬性,但是還能在外邊被訪問到

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號