Heim Backend-Entwicklung PHP-Tutorial PHP OPP 和模式 (1)_PHP教程

PHP OPP 和模式 (1)_PHP教程

Jul 13, 2016 am 10:28 AM
abstract implements instanceof interface php

PHP高级程序设计 学习笔记 2014.06.09

本文将介绍抽象类、接口和一种称为契约式编程的技术。使用这些OPP机制,所编写的代码就不限于只能计算或者输出内容了。这些机制能够在概念层次上定义类之间交互作用的规则,也为应用程序的扩展和定制提供了基础。

1.抽象类

抽象类机制中总是要定义一个公共的基类,而将特定的细节留给继承者来实现。通过抽象概念,可以在开发项目中创建扩展性很好的架构。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。在类的声明中使用 abstract 修饰符就可以将某个类声明为抽象的。

1.1方法原型(prototype)

是指方法的定义中剔除了方法体之后的签名。它包括存取级别、函数关键字、函数名称和参数。他不包含({})或者括号内部的任何代码。例如下面的代码就是一个方法原型:

<span>public</span> <span>function</span> prototypeName(<span>$protoParam</span>)
Nach dem Login kopieren

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。

1.2关于抽象类

1.3使用抽象类

<?<span>php
</span><span>abstract</span> <span>class</span><span> Car
{    
    </span><span>abstract</span> <span>function</span><span> getMaxSpeend();
}

</span><span>class</span><span> Roadster extends Car
{
    </span><span>public</span> <span>$Speend</span><span>;

    </span><span>public</span> <span>function</span> SetSpeend(<span>$speend</span> = 0<span>)
    {
        </span><span>$this</span>->Speend = <span>$speend</span><span>;
    }
    </span><span>public</span> <span>function</span><span> getMaxSpeend()
    {
        </span><span>return</span> <span>$this</span>-><span>Speend;
    }
}

</span><span>class</span><span> Street
{
    </span><span>public</span> <span>$Cars</span><span> ;
    </span><span>public</span> <span>$SpeendLimit</span><span> ;

    </span><span>function</span> __construct( <span>$speendLimit</span> = 200<span>)
    {
        </span><span>$this</span> -> SpeendLimit = <span>$speendLimit</span><span>;
        </span><span>$this</span> -> Cars = <span>array</span><span>();
    }
    
    </span><span>protected</span> <span>function</span> IsStreetLegal(<span>$car</span><span>)
    {
        </span><span>if</span> (<span>$car</span>->getMaxSpeend() < <span>$this</span> -><span> SpeendLimit)
        {
            </span><span>return</span> <span>true</span><span>;
        }
        </span><span>else</span><span>
        {
            </span><span>return</span> <span>false</span><span>;
        }
    }

    </span><span>public</span> <span>function</span> AddCar(<span>$car</span><span>)
    {
        </span><span>if</span>(<span>$this</span>->IsStreetLegal(<span>$car</span><span>))
        {
            </span><span>echo</span> 'The Car was allowed on the road.'<span>;
            </span><span>$this</span>->Cars[] = <span>$car</span><span>;
        }
        </span><span>else</span><span>
        {
            </span><span>echo</span> 'The Car is too fast and was not allowed on the road.'<span>;
        }
    }
}

</span><span>$Porsche911</span> = <span>new</span><span> Roadster();
</span><span>$Porsche911</span>->SetSpeend(340<span>);

</span><span>$FuWaiStreet</span> = <span>new</span> Street(80<span>);
</span><span>$FuWaiStreet</span>->AddCar(<span>$Porsche911</span><span>);

</span><span>/*</span><span>*
 *
 * @result
 * 
 * The Car is too fast and was not allowed on the road.[Finished in 0.1s]
 *
 </span><span>*/</span>
?>
Nach dem Login kopieren

2.对象接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

接口是一种类似于类的结构,可用于声明实现类所必须声明的方法。例如,接口通常用来声明API,而不用定义如何实现这个API。

大多数开发人员选择在接口名称前加上大写字母I作为前缀,以便在代码和生成的文档中将其与类区别开来。

2.1使用接口

和集成抽象类需要使用 extends 关键字不同的是,实现接口使用的是 implements 关键字。一个类可以实现多个接口,这时,我们需要用逗号将他们隔开。如果将某个类标记为实现了某个接口,但却没有实现这个借口的所有方法,将会抛出错误。

2.2使用接口的案例

<?<span>php
</span><span>abstract</span> <span>class</span><span> Car
{    
    </span><span>abstract</span> <span>function</span> SetSpeend(<span>$speend</span> = 0<span>);
}

</span><span>interface</span><span> ISpeendInfo
{
    </span><span>function</span><span> GetMaxSpeend();
}

</span><span>class</span> Roadster <span>extends</span> Car <span>implements</span><span> ISpeendInfo
{

    </span><span>public</span> <span>$Speend</span><span>;

    </span><span>public</span> <span>function</span> SetSpeend(<span>$speend</span> = 0<span>)
    {
        </span><span>$this</span>->Speend = <span>$speend</span><span>;
    }

    </span><span>public</span> <span>function</span><span> getMaxSpeend()
    {
        </span><span>return</span> <span>$this</span>-><span>Speend;
    }
}

</span><span>class</span><span> Street
{

    </span><span>public</span> <span>$Cars</span><span> ;
    </span><span>public</span> <span>$SpeendLimit</span><span> ;

    </span><span>function</span> __construct( <span>$speendLimit</span> = 200<span>)
    {
        </span><span>$this</span> -> SpeendLimit = <span>$speendLimit</span><span>;
        </span><span>$this</span> -> Cars = <span>array</span><span>();
    }

    </span><span>protected</span> <span>function</span> IsStreetLegal(<span>$car</span><span>)
    {
        </span><span>if</span> (<span>$car</span>->getMaxSpeend() < <span>$this</span> -><span> SpeendLimit)
        {
            </span><span>return</span> <span>true</span><span>;
        }
        </span><span>else</span><span>
        {
            </span><span>return</span> <span>false</span><span>;
        }
    }

    </span><span>public</span> <span>function</span> AddCar(<span>$car</span><span>)
    {
        </span><span>if</span>(<span>$this</span>->IsStreetLegal(<span>$car</span><span>))
        {
            </span><span>echo</span> 'The Car was allowed on the road.'<span>;
            </span><span>$this</span>->Cars[] = <span>$car</span><span>;
        }
        </span><span>else</span><span>
        {
            </span><span>echo</span> 'The Car is too fast and was not allowed on the road.'<span>;
        }
    }
}


</span><span>$Porsche911</span> = <span>new</span><span> Roadster();
</span><span>$Porsche911</span>->SetSpeend(340<span>);

</span><span>$FuWaiStreet</span> = <span>new</span> Street(80<span>);
</span><span>$FuWaiStreet</span>->AddCar(<span>$Porsche911</span><span>);

</span><span>/*</span><span>*
 *
 * @result
 * 
 * The Car is too fast and was not allowed on the road.[Finished in 0.1s]
 *
 </span><span>*/</span>
?>
Nach dem Login kopieren

3.instanceof 操作符

instanceof 操作符是PHP5中的一个比较操作符。他接受左右两边的参数,并返回一个boolean值。这个操作符是用来确定对象的某个实例是否为特定的类型,或者是否从某个类型继承,又或者实现类某个特定的接口。

<span>echo</span> <span>$Porsche911</span><span> instanceof Car;
</span><span>//</span><span>result:1</span>

<span>echo</span> <span>$Porsche911</span><span> instanceof ISpeendInfo;
</span><span>//</span><span>result:1</span>
Nach dem Login kopieren

4.契约式编程

契约式编程是指在编写类之前实现声明接口的一种编程实践。这种方法在保证类的封装性方面非常有用。使用契约式编程技术,我们可以在创建应用程序之前定义出视图实现的功能,这和建筑师在修建大楼之前先画好蓝图的做法非常相似。

5.总结

抽象类是使用 abstract 关键字声明的类。通过将某个类标记为抽象类,我们可以推迟实现所声明的方法。要将某个方法声明为抽象方法,只要去掉包含所有大括号的方法实体,将方法声明的代码行用分号结束即可。

抽象类不能直接实例化,他们必须被继承。

如果某个类从抽象类继承,当它没有实现基类中所声明的所有抽象方法时,它就必须也被声明为抽象的。

在接口中,我们可以声明没有方法体的方法原型,这点与抽象类很相似。他们之间的区别在于,接口不能声明任何具有方法体的方法;并且他们使用的语法也不一样。为了将揭开规则强制加到某个类上,我们需要使用implements关键字,而不是extends关键字。

有些情况下我们需要确定某个类是否是特定类的类型,或者是否实现了特定的接口。 instanceof 分成适合完成这个任务。instanceof 检查三件事情:实例是否是某个特定的类型,实例是否从某个特定的类型继承,实例或者他的任何祖先类是否实现类特定的接口。

某些语言具有从多个类继承的能力,这称为多重继承。PHP不支持多重继承。想法,他提供了为一个类声明多个接口的功能。

接口在声明类必须遵循的规则时非常有用。契约式编程技术使用这一功能来增强封装性,优化工作流。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/780762.htmlTechArticlePHP高级程序设计 学习笔记 2014.06.09 本文将介绍抽象类、接口和一种称为契约式编程的技术。使用这些OPP机制,所编写的代码就不限于只能计...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Expedition 33 - So erhalten Sie perfekte Chroma -Katalysatoren
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1676
14
PHP-Tutorial
1278
29
C#-Tutorial
1257
24
PHP und Python: Verschiedene Paradigmen erklärt PHP und Python: Verschiedene Paradigmen erklärt Apr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

PHP: Datenbanken und serverseitige Logik bearbeiten PHP: Datenbanken und serverseitige Logik bearbeiten Apr 15, 2025 am 12:15 AM

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Zweck von PHP: Erstellen dynamischer Websites Zweck von PHP: Erstellen dynamischer Websites Apr 15, 2025 am 12:18 AM

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

Wählen Sie zwischen PHP und Python: Ein Leitfaden Wählen Sie zwischen PHP und Python: Ein Leitfaden Apr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP und Python: Ein tiefes Eintauchen in ihre Geschichte PHP und Python: Ein tiefes Eintauchen in ihre Geschichte Apr 18, 2025 am 12:25 AM

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Warum PHP verwenden? Vorteile und Vorteile erläutert Warum PHP verwenden? Vorteile und Vorteile erläutert Apr 16, 2025 am 12:16 AM

Zu den Kernvorteilen von PHP gehören einfacher Lernen, starke Unterstützung für Webentwicklung, reiche Bibliotheken und Rahmenbedingungen, hohe Leistung und Skalierbarkeit, plattformübergreifende Kompatibilität und Kosteneffizienz. 1) leicht zu erlernen und zu bedienen, geeignet für Anfänger; 2) gute Integration in Webserver und unterstützt mehrere Datenbanken. 3) leistungsstarke Frameworks wie Laravel; 4) hohe Leistung kann durch Optimierung erzielt werden; 5) mehrere Betriebssysteme unterstützen; 6) Open Source, um die Entwicklungskosten zu senken.

Auswirkungen von PHP: Webentwicklung und darüber hinaus Auswirkungen von PHP: Webentwicklung und darüber hinaus Apr 18, 2025 am 12:10 AM

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

See all articles