繁体   English   中英

疯狂混乱PHP OOP同时“实现”“扩展”

[英]Crazy Confusing PHP OOP “implements” “extends” at the same time

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级组合在一起吗?

我完全糊涂了!

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行引发致命错误,因为接口上的方法根本没有实现。

是的,PHP可以使用implements实现多个接口,但它只能使用extends继承一个类

实施和扩展是两种不同的鞋子。

Extends告诉编译器/解释器该类是从另一个类派生的。 Implements告诉编译器/解释器,该类必须实现在接口中定义的契约。

查找接口,因为它们是OOP中多态的支柱。 当你从中派生时,Extends基本上实现了超类的公共(和半公共,受保护)接口。

extends :可以使用和/或覆盖任何父方法。

implements :必须具有所有接口方法:每个接口的方法必须至少在实现的类中声明。

它只是实现接口,它描述了所需的方法,因此其他方法有一个定义的接口可以使用,请参阅http://php.net/manual/en/language.oop5.interfaces.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM