PHP类扩展,从其他扩展类变量(php class extends, variable from o

2019-09-18 04:17发布

我有一个主类和两个扩展类:

class Main {
    public $foo;
}

class A extends Main {
  public function setVar()
    {
      $foo = "test"; 
    }
}

class B extends Main {
  public function getVar()
    {
      return $this->foo;
    }
}

$A = new A;
$B = new B;

$A->setVar();

echo "result: ".$B->getVar();

但结果($ B-> getVar())保持为空。 我清楚的简单的东西在这里......除此之外,这是去劈长班达在有关小类的方法是什么?

Answer 1:

使用依赖注入(DI)对不同类的实例之间共享主的一个实例,而不是试图使用的传承的实施例

class Main {
    public $foo;
}

class A {

    protected $main;

  public function setVar($data)
    {
      $this->main->foo = $data;
    }

  public function __construct(Main $main)
    {
      $this->main = $main;
    }
}

class B extends Main {
    protected $main;

  public function getVar()
    {
      return $this->main->foo;
    }

  public function __construct(Main $main)
    {
      $this->main = $main;
    }
}

$M = new Main;
$A = new A($M);
$B = new B($M);

$A->setVar("test");

echo "result: ".$B->getVar();


Answer 2:

更改:

class A extends Main {
    public function setVar()
    {
     $foo = "test"; 
    }
}

至:

class A extends Main {
    public function setVar()
    {
     $this->foo = "test"; 
    }
}

注意$ this关键字



Answer 3:

为了进一步澄清的东西,它可以帮助到想用这种方式。 比方说,你Main是代表车辆(因此我们将其重命名一类Vehicle ),因此是指Vehicle定义veicle的特性,但没有一个特定的人做与操作(我们需要的是一个实例 )。 让我们也翻译在A级Car和B Truck的,所以他们是你的主类的特殊化 ,与拥有一个通用的每一个特征沿着Vehicle ,延长的“车”的概念,并指出汽车的具体行为和属性一般情况下 ,和卡车一般 ,但-这一点-不引用特定的汽车或卡车。 我们需要为实例

class Vehicle
{
   public $numberOfTires;
}

class Car extends Vehicle
{
    function smashMe()
    {
        echo "Oops!";
    }
}

class Truck extends Vehicle
{
    function smashMe()
    {
        echo "More Oops!";
    }
}

从这一点,我们可以定义特定的情况下 (您的保时捷,我的卡玛洛......不同的车)上,我们可以执行的操作(调用方法),并设置属性。

$genericVehicle = new Vehicle;
$myPorsche = new Car;
$yourCamaro = new Car;
$hisTruck = new Truck;
$herTruck = new Truck;

但是,每一个实例保持独立于其他。



Answer 4:

两者都是同一类的不同实例。

操作上一个实例来完成,不会对任何其他人的申请(这是有点OOP点)。

做你想做什么,你可以有B伸出A,然后在B类的一个实例进行这两种操作。



文章来源: php class extends, variable from other extended class
标签: php class