PHP で OOP の概念を修正しています。ここに、可視性を練習するための簡単な php コードがあります。
Big_Animal で $name を private として宣言すると、
1) クラスの外から $name に別の値を代入しようとしても (つまり、$lion->name="King")、エラーがスローされないのはなぜですか?
2) Lion クラスで $name を再割り当てしようとしたときにエラーがスローされないのはなぜですか (つまり、$this->name="John")。
私の知る限り、私は混乱しています.privateプロパティは、プロパティを定義するクラス内でのみアクセスできます。
私がはっきりしていない他のことは、保護されたプロパティです。私の理解では、保護されたプロパティは、クラス自体とその子クラス内でのみアクセスできます。孫クラスからアクセスできますか?
ありがとうございました。
<?php
abstract class Big_Animal{
private $name="Mary";
abstract public function Greet();
public function Describe(){
return "name: ".$this->name;
}
public function __set($name,$value){
$this->name=$value;
}
public function __get($name){
return $this->name;
}
}
class Lion extends Big_Animal{
public function Greet(){
$this->name="John"; //no error for this
return " roar!";
}
public function Describe(){
return parent::Describe()." I'm a Lion!";
}
}
$lion = new Lion();
$lion->name="King"; //no error for this
echo $lion->Describe();
echo $lion->Greet();
?>