PHP访问父变量的子类


PHP Child class accessing Parent variable

我是一个需要帮助的新手。我正在尝试获取父值,但我在这方面失败了。非常感谢您的有益意见。提前谢谢。

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美元的费用!

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

最初

$supplier[$rs->current]$branch[$rs->isTo]-这是两个不同的对象

对于此示例,对象AB$supplier[$rs->current][strong>和$branch[$rs->isTo][strong>)

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

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

在第二个

代码:parent::getCost()-返回对象"B"的值(cost)。这不需要调用。

下一行,您将在不使用该方法的情况下使用对象"B"的属性(cost)。

你可以这样做:

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);
  }
}