2010-02-26 4 views
0

이 여기에 코드입니다 : 메소드 삽입에서정말 간단한 PHP 코드를 이해하는 데 어려움을 겪고 있습니다. 도와주세요?

<?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); 
} 
} 

(), parent::insert($data)은 무엇입니까? 그것은 스스로를 부르는 것입니까? 왜 그렇게했을까요? IF 조건에 관계없이 return 문이 실행되는 이유는 무엇입니까?

답변

2

Zend_Db_Table_Abstract 클래스의 삽입 메소드를 호출 중입니다. return 문은 조건부가 실패 할 경우에만 실행됩니다.

throw new 예외는 예외를 throw하고 메서드를 호출 한 곳으로 실행을 반환합니다.

+0

정말 고맙습니다. :) –

0

parent::insert($data) 전화 Zend_Db_Table_Abstract

그 방법의 예를 삽입() 함수의 부모 구현, 새 클래스에 사용자 정의 검사를 추가하고, 여전히에서 코드를 사용하는 것이 가능하다 부모 클래스 구현 (그것을 복사하여 함수에 붙여 넣는 대신). 이 클래스에 정의 된 함수를 호출합니다 parent 제외하고, 정적 함수를 호출하는 데 사용된다는 점에서

-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); 
+0

이 잘못된이며 무한 재귀가 발생합니다. –

+0

당신이 생각하는 것처럼 이것이 나올 것이라고 생각하지 않습니다. – jasonbar

+0

간단한 문제, 간단한 해결책. –

0

parent:: 키워드 self:: 또는 YourClassNameHere::과 유사하다 현재 클래스가 확장됩니다.

또한 throw 문은 함수의 종료점이므로 throw가 실행되면 함수는 return 문에 절대 도달하지 않습니다. 예외가 발생하면 trycatch을 사용하여 예외를 catch하고 처리하거나 예외가 호출 스택 위로 전파되도록 허용하는 것은 호출하는 함수에 달려 있습니다.