我在父類中定義了,$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";
//設(shè)置為私有屬性但是外部可以調(diào)用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>";
?>
2016-10-27
????父類Human中定義的$weight變量是protected訪問權(quán)限的,所以父類中的$weight是可以被繼承的,在子類NbaPlayer構(gòu)造方法中并沒有新建的$weight的這個屬性,而是調(diào)用的的父類的$weight屬性。所以你在外部調(diào)用$jordan->weight輸出的時候由于protected訪問權(quán)限不夠所以是不能輸出的。
????你可以在$jordan= new NbaPlayer('jordan','198cm','98kg','bull','23');
????這一行代碼后面加一行代碼:var_dump($jordan);查看對象的結(jié)構(gòu)。然后你會看到如下輸出:
????注意看,里面有一個["height":"Human":private]=> NULL,還有一個["height"]=> string(5) "198cm"。前者是父類中的height,但是由于訪問權(quán)限是private所以不能訪問,后者則是在構(gòu)造函數(shù)中新建的$height。再看weight只有一個,["weight":protected]=> string(4) "98kg" ,是從父類中繼承的,protected訪問權(quán)限的。
2016-10-27
你在子類NbaPlayer 的構(gòu)造方法中這一行:$this->height=$height;
這里$this->height其實并不是父類中的$height屬性,而是在子類NbaPlayer?中新建了一個與父類中$height屬性同名的另一個屬性,兩個屬性是不一樣的。
在子類NbaPlayer?構(gòu)造方法中新建的的$height屬性是默認(rèn)的訪問權(quán)限,所以在你調(diào)用這一行:echo $jordan->height."</br>";的時候也能輸出。