我无法理解这个非常简单的PHP代码。请帮忙?

时间:2010-02-26 00:02:56

标签: php model-view-controller zend-framework model zend-db

以下是代码:

<?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条件是什么?

4 个答案:

答案 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语句。如果抛出异常,则由调用函数使用trycatch捕获并处理异常,或者允许异常在调用堆栈中进一步传播。

答案 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);