Sorun bu gerçekten basit bir PHP kodu anlama yaşıyorum.

4 Cevap php

İşte kod:

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

Yöntem prospektüsünde () parent::insert($data) ne yapar? Kendisini çağırıyor? Neden ki? Why is that return statement run, regardless of the IF conditional?

4 Cevap

Bu Zend_Db_Table_Abstract sınıf geçme yöntemini çağırıyor. Koşullu başarısız olursa return ifadesi yalnızca idam edilecek.

bir özel durum ve yöntemi çağrılan yere yürütme dönecektir throw new Exception.

parent::insert($data) çağrıları the parent implementation insert () işlevi, Zend_Db_Table_Abstract o, yani

Bu şekilde, bu yeni sınıf için özel bir kontrol eklemek ve hala (yerine işlevi içine kopyalayıp yapıştırmak zorunda) üst sınıf uygulamasında kod yararlanmak mümkündür.

parent:: anahtar kelime benzer self:: veya YourClassNameHere:: o parent işlevini çağırır dışında, statik bir fonksiyonu olarak kullanılır olmasıdır ki mevcut sınıf uzanan sınıfında tanımlanır.

Ayrıca, bir throw deyimi bir fonksiyondan bir çıkış noktasıdır, bu yüzden atış idam ise, fonksiyon return tablosuna olsun asla. Bir özel durum ise, yakalamak birine çağıran fonksiyona kadar ve try ve catch kullanarak istisna işleme veya özel çağrı yığını daha da yukarı yaymak için izin verir.

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

Bu sınıf aramak

$order = new Order();
$order->insert($data);