繁体   English   中英

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]$ branch [$ rs-> isTo]

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

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

在第二

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

下一行,您将使用属性(对象“ 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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM