PHP - 在子类和父类之间传递变量


PHP - pass variable between child and parent class

我会知道在父类和子类之间传递变量的最佳方法是什么,并在整个类中执行更新该类。例如,我有一个父类,它在其中执行的是子类:

class My_Class {
   public $data;
   public $data2;
   public function __construct() {  
   }
   public function output() {
       $data['key1'] = 1;
       $data['key2'] = 2;
       $data2['key1'] = 'a';
       $data2['key2'] = 'b';
       $child_class = new Child_Class();
       $child_class->output();
       print_r($this->data); // only contains  key1 & key2, I want to get key3 and 4 also
       print_r($this->data2);
   }
}
class Child_Class extends My_Class {
   public function __construct() {  
   }
   public function output() {
       $data  = parent::$data; // want to get data array but it's empty
       $data2 = parent::$data2; // want to get data2 array but it's empty
       this->set_data();
   }
   public function set_data() {
       $this->data['key3'] = 3;
       $this->data['key4'] = 4;
       $this->data['key3'] = 'c';
       $this->data['key4'] = 'd';
   }

}
$class = new My_class();
$class->output();

目前我在父类中执行子类,因为我需要填充父类的主要数据。此类将基于某个变量执行子类。

将变量从父项继承

和赋值到子项以及从子项继承到父项的正确方法是什么?如果我使用依赖注入来检索扩展类中的数据,如何将变量分配给父类?

"你有一个例子吗" - 你去....

<?php
class My_Class {
    public $data = array('key1'=>1, 'key2'=>2);
    public $data2 = array('key1'=>'a', 'key2'=>'b');
    public function output() {
        echo "MyClass::output'r'n";
        print_r($this->data);
        print_r($this->data2);
    }
}

class Child_Class extends My_Class {
    public function __construct() {
        $this->data['key3'] = 3;
        $this->data['key4'] = 4;
        $this->data2['key3'] = 'c';
        $this->data2['key4'] = 'd';
    }
    public function output() {
        echo "Child_Class::output'r'n";
        parent::output();
    }
}
$class = new Child_Class();
$class->output();

指纹

Child_Class::output
MyClass::output
Array
(
    [key1] => 1
    [key2] => 2
    [key3] => 3
    [key4] => 4
)
Array
(
    [key1] => a
    [key2] => b
    [key3] => c
    [key4] => d
)

另请参阅:

  • https://en.wikipedia.org/wiki/Method_overriding
  • http://php.net/manual/en/keyword.parent.php
  • 什么是多态性,它的用途是什么,如何使用它?
  • https://en.wikipedia.org/wiki/Inheritance_%28object-oriented_programming%29
  • https://en.wikipedia.org/wiki/Constructor_%28object-oriented_programming%29

我的问题是一个类型,而不是我写$this->$data $this->data,$符号只需要在每个语句的开头。

我的第二个问题是在访问父类上的变量时省略$this->部分,从而为未与子类共享的父类创建本地范围的变量,应该使用 $this->variable .