0

我在从我的 Deliveries 访问 Jobinfo 类时遇到问题。问题是我需要能够从我的子类中获取 getQty 的值,并且我还需要能够使用父类的属性获取 qty_ship 方法。我怎样才能做到这一点?它似乎不起作用并且对此感到非常困惑......我希望能够动态地使用来自 Parent->Child 和 Child->Parent 的方法。

class jobInfo
{
    public $JOB_ID;
    private $deliveries; // DELIVERIES CLASS

    function __construct($job_id)
    {

        $this->JOB_ID=$job_id;
        $this->deliveries = new Deliveries();

    }
    public function getQty()
    {
         return $this->query_s('job_sheet','*', 'job_id',$this->JOB_ID, 1, 'qty');
         //returns a quantity from query method
    }

}


class Deliveries  extends jobInfo
{

    function __construct(){}

    public function qty_ship()
    {
        $qty = 0;
        $SQL = mysql_query("SELECT * FROM deliveries WHERE jID='".parent::JOB_ID."'") or die(mysql_error());

        $rows = mysql_num_rows($SQL);
        if($rows>0)
        {
            while($data = mysql_fetch_array($SQL))
            {
                $qty += $data['qty_shipped'];
            }
        }
        return $qty;
     }

     public function getTotalBO()
     {
         $qty =  parent::getQty();
         $totalship =  $this->qty_ship();

         $x = $qty-$totalship;
         return $x; 
     }
 }

$A = new Jobinfo(15);
4

2 回答 2

1

您想要$this->getQty()and $this->JOB_ID,但为了完整起见,请考虑:

  1. 删除空的无参数构造函数,因为它实际上不能用于实例化类,除非它使用作业 ID 调用父构造函数,因为您希望作业 ID 在外部定义,所以它不能这样做。

  2. 制作 JOB_ID protected。为了更好地封装,您可以改为使用它private并提供一个 getJobId() 方法。

  3. 使用一致的类命名 -jobInfo以小写Deliveries开头并以大写开头。

  4. 处理一致的函数命名 - 您将下划线分隔的函数与驼峰式函数混合在一起。

  5. 使用一致的间距 - 您在没有太多押韵或理由的情况下混合使用 1 个字符、2 个字符和 0 个字符的间距。

欢迎来到 OOP,祝你好运!

于 2012-11-27T06:25:47.560 回答
0

如果您从该类扩展,那么您应该使用

$this->getQty();

$this 将返回当前对象,该对象已经包含具有所有公共和受保护变量和方法的父对象。

你应该只在调用静态类时使用 ::

举个例子 :

jobInfo::getQty();

您可能还想查看命名约定。

http://framework.zend.com/manual/1.12/en/coding-standard.naming-conventions.html

于 2012-11-27T04:52:11.073 回答