以下是代码:
<?php
class Order extends Zend_Db_Table_Abstract
{
protected $_name = 'orders';
protected $_limit = 200;
protected $_authorised = false;
public function setLimit($limit)
{
$this->_limit = $limit;
}
public function setAuthorised($auth)
{
$this->_authorised = (bool) $auth;
}
public function insert(array $data)
{
if ($data['amount'] > $this->_limit
&& $this->_authorised === false) {
throw new Exception('Unauthorised transaction of greater than '
. $this->_limit . ' units');
}
return parent::insert($data);
}
}
在方法insert()中,parent::insert($data)
做了什么?它在呼唤自己吗?为什么会这样做? 为什么返回语句会运行,无论IF条件是什么?
答案 0 :(得分:2)
它在Zend_Db_Table_Abstract类上调用insert方法。只有在条件失败时才会执行return语句。
throw new Exception将抛出异常并将执行返回到调用该方法的位置。
答案 1 :(得分:0)
parent::insert($data)
调用 insert()函数的父实现,即Zend_Db_Table_Abstract
的
这样,可以在新类中添加自定义检查,并且仍然可以使用父类实现中的代码(而不必将其复制+粘贴到函数中)。
答案 2 :(得分:0)
parent::
类似于关键字self::
或YourClassNameHere::
,因为它用于调用静态函数,但parent
将调用在此处定义的函数当前类扩展的类。
此外,throw
语句是函数的退出点,因此如果执行throw,函数将永远不会到达return
语句。如果抛出异常,则由调用函数使用try
和catch
捕获并处理异常,或者允许异常在调用堆栈中进一步传播。
答案 3 :(得分:-1)
<?php
class Order extends Zend_Db_Table_Abstract
{
protected $_name = 'orders';
protected $_limit = 200;
protected $_authorised = false;
public function setLimit($limit)
{
$this->_limit = $limit;
}
public function setAuthorised($auth)
{
$this->_authorised = (bool) $auth;
}
public function insert(array $data)
{
if ($data['amount'] > $this->_limit
&& $this->_authorised === false) {
throw new Exception('Unauthorised transaction of greater than '
. $this->_limit . ' units');
}
return $this->insert($data);
}
}
调用此课程
$order = new Order();
$order->insert($data);