-
-
- クラス従業員{
- private $sal=3000;
- //protected $sal=3000;
- public function getSal(){
- return $this->sal;
- }
- }
- クラスマネージャーは従業員を拡張します {
- protected $sal=5000;
public function getParentSal(){
- //ここで返されるのは親クラスのプライベート属性です。
- return parent:: getSal();
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
"; - echo $manager->getSal();
- echo "< br>";
- echo "parent's $sal ".$manager->getParentSal();
- ?>
-
コードをコピー
プログラムの実行結果:
PHP5.3.8
3000
親の給料 3000ドル
親クラスの属性がサブクラスによってオーバーライドされる場合。
結果はこれです。 5 行目の属性定義が保護されることに注意してください。
-
-
- クラス従業員{
- //private $sal=3000;
- protected $sal=3000;
- public function getSal(){
- return $this->sal;
- }
- }
クラスマネージャーは従業員を拡張します {
- protected $sal=5000;
public function getParentSal(){
- //ここで返されるのはクラスの親 Private 属性。
- returnparent::getSal();
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $ manager-> ;getSal();
- echo "
"; - echo "parent's $sal ".$manager->getParentSal();
- ?>
-
コードをコピー
プログラムの動作結果:
PHP5.3.8
5000
親の給与5000ドル
最初の例では、親クラスのプライベート $sal がオーバーライドされていないため、親クラスのメソッド $manager->getSal() が親クラス独自のプライベート プロパティ $sal を呼び出します。この時点で、メモリ。
2 番目の列では、親クラスの保護された $sal がオーバーライドされます。この親クラスのメソッド $manager->getSal() は、オーバーライドされた $sal をこの時点ではメモリに存在しません。 $sal は 1 つだけです。
次に 3 番目の例を見てみましょう
サブクラスでオーバーライドされたメソッドは、現在のプライベート クラスに対して有効です。
-
-
- クラス従業員{
- private $sal=3000;
- public function getSal(){
- return $this->sal;
- }
- }
クラスマネージャーは従業員を拡張します {
- private $sal=5000;
- //メソッドを書き直しました
- public function getSal(){
- return $this->sal;
- }
- public function getParentSal(){
- //ここで返されるのは、親クラスのプライベート属性です。
- returnparent::getSal();
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal();
- echo "
"; - echo "親の $sal ".$manager->getParentSal();
- ?>
-
コードをコピー
結果を実行
PHP5.3.8
5000
親の給料 3000ドル
この例では、サブクラスが getSal() メソッドをオーバーライドするため、呼び出されるのはサブクラスの属性です。
サブクラスのこの行をコメントすると
//プライベート $sal=5000;
E:wampwwwoo2-52-5-3.php の 14 行目で、次のエラーが表示されます。 Notice: Unknown property: Manager::$sal
12 行目のサブクラス rewrite メソッドをコメントアウトすると、 echo $manager->getSal(); の結果は親クラス 3000 のプライベート属性 $sal になります
zend デバッグ ステータスを開いて、メモリ内で何が起こっているかを確認します。下部に $sal が 2 つあることに注意してください。それぞれ 3000 と 5000 です。
-
- クラス従業員{
- private $sal=3000;
- パブリック関数getSal(){
- return $this->sal;
- }
- }
- クラスマネージャーは従業員{
- protected $salを拡張します=5000;
- public function getParentSal(){
- return $this->sal;
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal();
- ?>
コードをコピー
プログラムの実行結果:
PHP5.3.8
3000
親クラスの属性 $sal を protected に変更すると、サブクラスが親クラスの属性をオーバーライドします。メモリには $sal が 1 つだけあります。
-
- クラス従業員{
- protected $sal=3000;
- public function getSal(){
- return $this->sal;
- }
- }
- クラスマネージャーは従業員{
- protected $salを拡張します=5000;
- public function getParentSal(){
- return $this->sal;
- }
- }
- $manager = new Manager();
- echo "PHP ".phpversion()."
";
- echo $manager->getSal();
- ?>
コードをコピー
プログラムの実行結果:
PHP5.3.8
5000
注意:
PHP5 は、parent-> の代わりにparent:: を使用して親クラスを呼び出します。これは、PHP5 が親クラスをメモリ内に作成しないことを示すのに十分です。
PHP5 は Java よりも継承を単純化したいと考えています。
|