Is there a way in PHP to overwrite a method declared by one interface in an interface extending that interface?
Örnek:
Herhalde yanlış bir şey yapıyor, ama burada ne var ediyorum:
interface iVendor{
public function __construct($vendors_no = null);
public function getName();
public function getVendors_no();
public function getZip();
public function getCountryCode();
public function setName($name);
public function setVendors_no($vendors_no);
public function setZip($zip);
public function setCountryCode($countryCode);
}
interface iShipper extends iVendor{
public function __construct($vendors_no = null, $shipment = null);
public function getTransitTime($shipment = null);
public function getTransitCost($shipment = null);
public function getCurrentShipment();
public function setCurrentShipment($shipment);
public function getStatus($shipment = null);
}
Bir şey uzatmak Normalde PHP, sen (değil mi?) Orada bulunan herhangi bir yöntem üzerine yazabilirsiniz. Bir arayüz başka uzanır Ancak, size izin vermez. Ben bu yanlış düşünüyorum sürece ... Ben iShipper arabirimini uygulamak, ben Gönderici nesne Satıcı nesnesi (yani iVendor arabirimini uygulayan) genişletmek yapmak zorunda değilsiniz. Ben diyorum ki:
class FedEx implements iShipper{}
ve FedEx iVendor ve iShipper gelen tüm yöntemleri uygulamak olun. Ancak, iVendor ve iShipper yılında __ construct fonksiyonları benzersiz olması gerekir. Ben $ kargo = null dışarı sürebilir biliyorum, ama o zaman (başlatmasını sırasında sadece vendors_no ve sevkiyat ileterek) Göndericileri oluşturmak için uygun olmaz.
Herkes bu işi yapmak için nasıl biliyor? Benim dönüş $ nakliyeci-> setShipment ($ sevkiyat) arayarak sevkiyat ayarlamak zorunda olduğunu; Gönderici ben örnekleriz, ama bunu yapmak zorunda aşmanın bir yolunu umut ediyorum sonra ...
A little more explanation for the curious:
The FedEx Object has methods that go to the FedEx site (using cURL) and gets an estimate for the Shipment in question. I have a UPS Object, a BAXGlobal Object, a Conway Object, etc. Each one has COMPLETELY different methods for actually getting the shipping estimate, but all the system needs to know is that they are a "shipper" and that the methods listed in the interface are callable on them (so it can treat them all exactly the same, and loop through them in a "shippers" array calling getTransitX() to find the best shipper for a shipment).
Each "Shipper" is also a "Vendor" though, and is treated as such in other parts of the system (getting and putting in the DB, etc. Our data design is a pile of crap, so FedEx is stored right alongside companies like Dunder Mifflin in the "Vendors" table, which means it gets to have all the properties of every other Vendor, but needs the extra properties and methods supplied by iShipper).