访问父方法和属性PHP

时间:2012-11-27 04:42:11

标签: php oop

我在从我的交付中访问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);

2 个答案:

答案 0 :(得分:1)

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

  1. 删除空的no-parm构造函数,因为它实际上不能用于实例化类,除非它调用具有作业ID的父构造函数,因为您希望在外部定义作业ID,所以它无法执行。

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

  3. 处理一致的类命名 - jobInfo以小写开头,Deliveries以大写开头。

  4. 处理一致的函数命名 - 您将下划线分隔的函数与camel-case函数混合使用。

  5. 处理一致的间距 - 您可以将1个字符,2个字符和0个字符的间距混合在一起,没有太多的押韵或理由。

  6. 欢迎来到OOP和祝你好运!

答案 1 :(得分:0)

如果你从该课程延伸,那么你应该使用

$this->getQty();

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

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

例如:

jobInfo::getQty();

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

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