0

コードは次のとおりです。

<?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 条件に関係なく、return ステートメントが実行されるのはなぜですか?

4

4 に答える 4

2

Zend_Db_Table_Abstract クラスで insert メソッドを呼び出しています。return ステートメントは、条件が失敗した場合にのみ実行されます。

throw new Exception は例外をスローし、メソッドを呼び出した場所に実行を返します。

于 2010-02-26T00:05:20.757 に答える
0

parent::現在のクラスが拡張するクラスで定義されている関数を呼び出すことを除いて、キーワードself::またはYourClassNameHere::静的関数を呼び出すために使用されるという点で似ています。parent

また、ステートメントは関数の終了点であるため、スローが実行されると、関数はステートメントthrowに到達しません。return例外がスローされた場合、呼び出し元の関数は、例外をキャッチして処理するかtrycatchまたは例外がコール スタックをさらに伝播できるようにするかのいずれかになります。

于 2010-02-26T00:09:53.883 に答える
0

parent::insert($data)insert() 関数の親実装を呼び出します。Zend_Db_Table_Abstract

そうすれば、カスタム チェックを新しいクラスに追加し、親クラスの実装のコードを引き続き利用することができます (コードをコピーして関数に貼り付ける必要はありません)。

于 2010-02-26T00:07:07.667 に答える
-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);
于 2010-02-26T00:09:47.673 に答える