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)) {
......
......
Run Code Online (Sandbox Code Playgroud)
你能帮我解释它怎么能同时" implements"" extends"吗?
它只是将3级组合在一起吗?
我完全糊涂了!
Thi*_*ter 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) {} }
Run Code Online (Sandbox Code Playgroud)
此代码在第5行引发致命错误,因为接口上的方法未正确实现(参数缺失).它也会在第6行引发致命错误,因为接口上的方法根本没有实现.
实施和扩展是两种不同的鞋子.
Extends告诉编译器/解释器该类是从另一个类派生的.Implements告诉编译器/解释器,该类必须实现在接口中定义的契约.
查找接口,因为它们是OOP中多态的支柱.当你从中派生时,Extends基本上实现了超类的公共(和半公共,受保护)接口.