abstract class SF_Model_Acl_Abstract
extends SF_Model_Abstract
implements SF_Model_Acl_Interface, Zend_Acl_Resource_Interface
{
protected $_acl;
protected $_identity;
public function setIdentity($identity)
{
if (is_array($identity)) {
......
......
你能帮我解释一下它如何“implements
”同时“extends
”吗?
它只是将3级组合在一起吗?
我完全糊涂了!
答案 0 :(得分:17)
extends
用于继承,即继承类中的方法/字段。 PHP类只能从一个类继承。
implements
用于实现接口。它只需要类具有在已实现的接口中定义的方法。
示例:
interface INamed { function getName($firstName); }
class NameGetter { public function getName($firstName) {} }
class Named implements INamed { function getName($firstName) {} }
class AlsoNamed extends NameGetter implements INamed {}
class IncorrectlyNamed implements INamed { function getName() {} }
class AlsoIncorrectlyNamed implements INamed { function setName($newName) {} }
此代码在第5行引发致命错误,因为接口上的方法未正确实现(参数丢失)。 它也会在第6行引发致命错误,因为接口上的方法根本没有实现。
答案 1 :(得分:5)
是的,PHP可以使用 implements 实现多个界面,但它只能使用 extends 继承一个类
答案 2 :(得分:5)
实施和扩展是两种不同的鞋子。
Extends告诉编译器/解释器该类派生自另一个类。 Implements告诉编译器/解释器,类必须实现在接口中定义的契约。
查找接口,因为它们是OOP中多态性的支柱。当你从中派生时,Extends基本上实现了超类的公共(和半公共,受保护)接口。
答案 3 :(得分:2)
extends
:可以使用和/或覆盖任何父方法。
implements
:必须拥有所有接口方法:每个接口的方法必须至少在实现的类中声明。
答案 4 :(得分:1)
它只是实现接口,它描述了所需的方法,因此其他方法有一个定义的接口可以使用,参见http://php.net/manual/en/language.oop5.interfaces.php