我在从我的交付中访问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);
答案 0 :(得分:1)
您想要$this->getQty()
和$this->JOB_ID
,但为了完整起见,请考虑:
删除空的no-parm构造函数,因为它实际上不能用于实例化类,除非它调用具有作业ID的父构造函数,因为您希望在外部定义作业ID,所以它无法执行。
制作JOB_ID protected
。为了更好的封装,您可以改为使用private
并提供getJobId()方法。
处理一致的类命名 - jobInfo
以小写开头,Deliveries
以大写开头。
处理一致的函数命名 - 您将下划线分隔的函数与camel-case函数混合使用。
处理一致的间距 - 您可以将1个字符,2个字符和0个字符的间距混合在一起,没有太多的押韵或理由。
欢迎来到OOP和祝你好运!
答案 1 :(得分:0)
如果你从该课程延伸,那么你应该使用
$this->getQty();
$ this将返回当前对象,该对象已包含具有所有公共和受保护变量和方法的父对象。
你应该只在调用静态类时使用::
例如:
jobInfo::getQty();
您可能还想查看命名约定。
http://framework.zend.com/manual/1.12/en/coding-standard.naming-conventions.html