PHP子类访问父变量

时间:2016-05-12 17:04:02

标签: php oop

我是需要帮助的新手。我试图获得父母价值,但我没有做到这一点。非常感谢有用的评论。提前谢谢。

abstract class mainClass 
{
  protected $cost=0;
  public $set=false;
  function setCost($cost){
    $this->cost;
  }
  function getCost()
  {
    return $this->cost;
  }
}

class supplierClass extends  mainClass { }

class branchClass extends  supplierClass 
{
  function setCost  ($cost)
  {
    if( $cost==0)
    {
      parent::getCost();
        $cost=$this->cost;
    }
    return$this->cost=$cost;
  }
}

db循环通过供应商分支买/卖交易

while ($rs=$pdoUpdate->fetch(PDO::FETCH_OBJ))
{
  //$rs->current='35' transferring from supplier 35
  //$rs->cost=$50.00
  //$rs->isTo='27' to branch 27
  // several branches/suppliers transactions

  if(!isset($supplier[$rs->current]->set))
  {
    $supplier[$rs->current]=new supplierClass();
    $supplier[$rs->current]->set=true;
  }
  if(!isset($branch[$rs->isTo]->set))
  {
    $branch[$rs->isTo]=new branchClass();
    $branch[$rs->isTo]->set=true;
  }
  $supplier[$rs->current]->setCost($rs->cost);
  $branch[$rs->isTo]->setCost(0);
}
echo "branch price=". $branch[$rs->isTo]->getCost();
// branch price=0

但我希望它默认供应商的成本为50美元!

很抱歉,如果这是完全错误的,但这对我来说是新的 非常感谢。我希望我能向你学习。

1 个答案:

答案 0 :(得分:0)

起初

$供应商[$ rs->当前] $ branch [$ rs-> isTo] - 这是两个不同的对象

对于此示例对象 A B $ supplier [$ rs-> current] $ branch [$ RS-> ISTO]

此代码: $ supplier [$ rs-> current] - > setCost($ rs-> cost); - 在对象 A 中设置费用

此代码: $ branch [$ rs-> isTo] - > setCost(0); - 在对象 B 中设置费用 > 但是 B 不知道类 A ,因此,成本(对象B)= 0

在第二个

代码: parent :: getCost(); - 返回对象" B "的值(费用)。这不需要打电话。

下一行,您将使用属性(费用对象" B ")而不使用该方法。

你可以这样做:

function setCost  ($cost)
{
    if( $cost==0)
    {
        $this->cost = $this->getCost();
    }
    return $this->cost;
}

<强>第三

要解决您的问题 - 您需要使用一个对象。

如何做到这一点 - 这取决于整体任务和资源。

作为一个例子,我可以提供这个解决方案:

class Cost
{
   protected $cost = 0;
   function setCost($cost){
       $this->cost;
   }
   function getCost()
   {
       return $this->cost;
   }
}

abstract class mainClass 
{
  public $set=false;
  public $cost;
  function __construct(Cost $cost)
  {
       $this->cost = $cost;
  }
  function getCost()
  {
    return $this->cost->getCost();
  }

  function setCost  ($cost)
  {
    $this->cost->setCost($cost);
  }
}

class supplierClass extends  mainClass { }

class branchClass extends  supplierClass 
{
  function setCost  ($cost)
  {
    if($cost==0)
    {
        $cost=$this->cost->getCost();
    }
    $this->cost->setCost($cost);
  }
}

或使用静态类

class Cost
{
   protected static $cost = 0;
   function static setCost($cost){
       static::$cost;
   }
   function static getCost()
   {
       static::$cost;
   }
}

abstract class mainClass 
{
  public $set=false;
  function getCost()
  {
    return Cost::getCost();
  }

  function setCost  ($cost)
  {
    Cost::setCost($cost);
  }
}

class supplierClass extends  mainClass { }

class branchClass extends  supplierClass 
{
  function setCost  ($cost)
  {
    if($cost==0)
    {
        $cost=Cost::getCost();
    }
    Cost::setCost($cost);
  }
}