Heim Backend-Entwicklung PHP-Tutorial PHP面向对象的进阶学习(抽像类、接口、final、类常量)_php技巧

PHP面向对象的进阶学习(抽像类、接口、final、类常量)_php技巧

May 17, 2016 am 09:11 AM
final php面向对象 接口 类常量

一、抽像类(abstract)
在我们实际开发过程中,有些类并不需要被实例化,如前面学习到的一些父类,主要是让子类来继承,这样可以提高代码复用性
语法结构:
复制代码 代码如下:

abstract class 类名{
属性 $name;
方法(){} //方法也可以为abstract 修饰符 function 方法名(){}
}

例:
复制代码 代码如下:

abstract class animal{
public $name;
public $age;
//抽象方法不能有方法体,主要是为了让子类去实现;
abstract public function cry();
//抽象类中可以包含抽象方法,同时也可以包含实例类方法
public function getname(){
echo $this->name;
}
}
class Cat{
public function cry(){
echo 'ok';
}
}

理解:动物类,实际上是一个抽象的概念,它规定了一些动物有些哪共同的属性和行为,但实际上它自己并没收有那些属性和行为。再比如:交通工具类,植物类等等

注意:
1、如果一个类用了abstract来修饰,则该类就是一个抽象类,如果一个方法被abstract修饰,那么该方法就是一个抽象方法,抽象方法不能有方法体=> abstract function cry(); 连{}也不可以有
2、抽象类一定不能被实例化,抽象类可以没有抽象方法,但是如果一个类包含了任意一个抽象方法,这个类一定要声明为abstract类;
3、如果一个类继承了另一个抽象类,则该子类必须实现抽象类中所有的抽象方法(除非它自己也声明为抽象类);

二、接口(interface)
接口就是将一些没有实现的方法,封装在一起,到某个类要用的时候,再根据具体情况把这些方法写出来;
语法结构
interface 接口名{
//属性、方法
//接口中的方法都不能有方法体;
}
如何实现接口
class 类名 implements 接口名{

}
理解:接口就是更加抽象的抽象类,抽象类里的方法可以有方法体,但是接口中的方法必须没有方法体。接口实现了程序设计的多态和高内聚、低偶合的设计思想;

例:
复制代码 代码如下:

//接口是定义规范、属性的,一般以小写的i开头;
interface iUsb{
public function start();
public function stop();
}
//编写相机类,让它去实现接口
//当一个类实现了某个接口,那么该类就必须实现接口的所有方法
class Camera implements iUsb{
public function start(){
echo 'Camera Start Work';
}
public function stop(){
echo 'Camera Stop Work';
}
}
//编写一个手机类
class Phone implements iUsb{
public function start(){
echo 'Phone Satrt Work';
}
public function stop(){
echo 'Phone Stop Work';
}
}
$c=new Camera();
$c->start();
$p=new Phone();
$p->start();

什么时候使用接口:
1、定下规范,让其他程序员来实现
2、当多个平级的类,都需要去实现某个功能,但是实现的方式不一样;

小结:
1、接口不能被实例化,接口中所有的方法都不能有主体;
2、一个类可以实现多个接口,以逗号(,)分隔 class demo implements if1,if2,if3{}
3、接口中可以有属性,但必须是常量,常量不可以有修饰符(默认是public修饰符)
如:interface iUsb{
const A=90;
}
echo iUsb::A;
4、接口中的方法都必须是public的,默认是public;
5、一个接口不能继承其他的类,但是可以继承其它的接口,一个接口可以继承多个其它接口
如:interface 接口名 extends if1,if2{}
6、一个类可以在继承父类的同时实现其它接口
如:class test extends testbase implements test1,test2{}

实现接口VS继承类
php的继承是单一继承,也就是一个类只能继承一个父类,这样对子类功能的扩展有一定的影响。实现接口可以看做是对继承类的一个补充。继承是层级的关系,不太灵活,而实现接口是平级的关系,实现接口可以在不打破继承关系的前提下,对某个功能扩展,非常灵活。

三、Final

1、如果我们希望某个类不被其它的类继承(比如为了安全原因等。。),那么可以考虑使用final
语法:
final class A{}
2、如果我们希望某个方法,不被子类重写,可以考虑使用final来修饰,final修饰的方法还是可以继承的,因为方法的继承权取决于public的修饰
如:
复制代码 代码如下:

class A{
final public function getrate($salary){
return $salary*0.08;
}
}
class B extens A{
//这里父类的getrate方法使用了final,所以这里无法再重写getrate
//public function getrate($salary){
// return $salary*0.01;
//}
}

3、final不能用来修饰属性

四、类常量(const)

在某些情况下,可能有这样的需求:当不希望一个成员变量被修改,希望该变量的值是固定不变的,这时可以使用const常量(常量名应该全用大写,并且不带$符号,常量不可以加修饰符)
语法:
const 常量名=常量值; //必须赋初值,因为常量是不能修改的
调用:
类名::常量名[本类内部可用self::常量名] 或者 接口名::常量名 //接口中只能使用常量,不能使用变量

如:
复制代码 代码如下:

class A{
const TAX_RATE=0.08;
function paytax($salary){
return $salary*self::TAX_RATE;
}
}
$a=new A();
echo $a->paytax(100);

注:
1、常量可以被子类继承
2、常量是属于某个类的,而不属于某个对象
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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate 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)

Was sind die internen Schnittstellen eines Computer-Motherboards? Empfohlene Einführung in die internen Schnittstellen eines Computer-Motherboards Was sind die internen Schnittstellen eines Computer-Motherboards? Empfohlene Einführung in die internen Schnittstellen eines Computer-Motherboards Mar 12, 2024 pm 04:34 PM

Obwohl der Installationsprozess einfach ist, stoßen Benutzer beim Zusammenbau des Computers häufig auf Probleme mit der Verkabelung. Obwohl sich der Lüfter drehen kann, funktioniert er beim Booten möglicherweise nicht. Es kommt zu einem F1-Fehler „CPUFanError“, der auch dazu führt, dass der CPU-Kühler die Geschwindigkeit nicht intelligent anpassen kann. Lassen Sie uns das allgemeine Wissen über die Schnittstellen CPU_FAN, SYS_FAN, CHA_FAN und CPU_OPT auf der Hauptplatine des Computers teilen. Populäre Wissenschaft über die Schnittstellen CPU_FAN, SYS_FAN, CHA_FAN und CPU_OPT auf der Hauptplatine des Computers 1. CPU_FANCPU_FAN ist eine dedizierte Schnittstelle für den CPU-Kühler und arbeitet mit 12 V

Der Unterschied zwischen „final', „finally' und „finalize' in Java Der Unterschied zwischen „final', „finally' und „finalize' in Java Feb 19, 2024 pm 12:16 PM

Der Unterschied zwischen „final“, „final“ und „finalize“ in Java erfordert spezifische Codebeispiele. In der Java-Programmierung stoßen Sie häufig auf die drei Schlüsselwörter „final“, „final“ und „finalize“. In diesem Artikel werden die Unterschiede zwischen diesen drei Schlüsselwörtern ausführlich erläutert und Codebeispiele gegeben, um den Lesern ein besseres Verständnis zu erleichtern. 1. Schlüsselwort final Das Schlüsselwort final kann für Klassen, Methoden und Variablen verwendet werden. Seine Funktion besteht darin, die geänderte Klasse zu erstellen

Gängige Programmierparadigmen und Entwurfsmuster in der Go-Sprache Gängige Programmierparadigmen und Entwurfsmuster in der Go-Sprache Mar 04, 2024 pm 06:06 PM

Als moderne und effiziente Programmiersprache verfügt die Go-Sprache über umfangreiche Programmierparadigmen und Entwurfsmuster, die Entwicklern beim Schreiben von qualitativ hochwertigem, wartbarem Code helfen können. In diesem Artikel werden gängige Programmierparadigmen und Entwurfsmuster in der Go-Sprache vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Objektorientierte Programmierung In der Go-Sprache können Sie Strukturen und Methoden verwenden, um objektorientierte Programmierung zu implementieren. Durch die Definition einer Struktur und das Binden von Methoden an die Struktur können die objektorientierten Funktionen der Datenkapselung und Verhaltensbindung erreicht werden. Paketmaini

Einführung in PHP-Schnittstellen und deren Definition Einführung in PHP-Schnittstellen und deren Definition Mar 23, 2024 am 09:00 AM

Einführung in die PHP-Schnittstelle und wie sie definiert ist. PHP ist eine in der Webentwicklung weit verbreitete Open-Source-Skriptsprache. Sie ist flexibel, einfach und leistungsstark. In PHP ist eine Schnittstelle ein Werkzeug, das gemeinsame Methoden zwischen mehreren Klassen definiert, um Polymorphismus zu erreichen und Code flexibler und wiederverwendbar zu machen. In diesem Artikel werden das Konzept von PHP-Schnittstellen und deren Definition vorgestellt und spezifische Codebeispiele zur Veranschaulichung ihrer Verwendung bereitgestellt. 1. PHP-Schnittstellenkonzept Die Schnittstelle spielt eine wichtige Rolle in der objektorientierten Programmierung und definiert die Klassenanwendung

Lösung für NotImplementedError() Lösung für NotImplementedError() Mar 01, 2024 pm 03:10 PM

Der Grund für den Fehler liegt in Python. Der Grund, warum NotImplementedError() in Tornado ausgelöst wird, kann darin liegen, dass eine abstrakte Methode oder Schnittstelle nicht implementiert ist. Diese Methoden oder Schnittstellen werden in der übergeordneten Klasse deklariert, aber nicht in der untergeordneten Klasse implementiert. Unterklassen müssen diese Methoden oder Schnittstellen implementieren, um ordnungsgemäß zu funktionieren. Die Lösung dieses Problems besteht darin, die von der übergeordneten Klasse deklarierte abstrakte Methode oder Schnittstelle in der untergeordneten Klasse zu implementieren. Wenn Sie eine Klasse verwenden, um von einer anderen Klasse zu erben, und dieser Fehler angezeigt wird, sollten Sie alle in der übergeordneten Klasse deklarierten abstrakten Methoden in der untergeordneten Klasse implementieren. Wenn Sie eine Schnittstelle verwenden und dieser Fehler angezeigt wird, sollten Sie alle in der Schnittstelle deklarierten Methoden in der Klasse implementieren, die die Schnittstelle implementiert. Wenn Sie sich nicht sicher sind, welches

Einblick in das Hongmeng-System: tatsächliche Funktionsmessung und Nutzungserfahrung Einblick in das Hongmeng-System: tatsächliche Funktionsmessung und Nutzungserfahrung Mar 23, 2024 am 10:45 AM

Als neues Betriebssystem von Huawei hat das Hongmeng-System in der Branche für großes Aufsehen gesorgt. Als neuer Versuch von Huawei nach dem US-Verbot setzt das Hongmeng-System große Hoffnungen und Erwartungen. Kürzlich hatte ich das Glück, ein Huawei-Mobiltelefon mit dem Hongmeng-System zu bekommen. Nach einer Nutzungsphase und tatsächlichen Tests werde ich einige Funktionstests und Nutzungserfahrungen des Hongmeng-Systems teilen. Werfen wir zunächst einen Blick auf die Benutzeroberfläche und die Funktionen des Hongmeng-Systems. Das Hongmeng-System übernimmt insgesamt den Huawei-eigenen Designstil, der einfach, klar und reibungslos in der Bedienung ist. Auf dem Desktop diverse

Innerklassenimplementierung von Schnittstellen und abstrakten Klassen in Java Innerklassenimplementierung von Schnittstellen und abstrakten Klassen in Java Apr 30, 2024 pm 02:03 PM

Java ermöglicht die Definition innerer Klassen innerhalb von Schnittstellen und abstrakten Klassen und bietet so Flexibilität für die Wiederverwendung und Modularisierung von Code. Innere Klassen in Schnittstellen können spezifische Funktionen implementieren, während innere Klassen in abstrakten Klassen allgemeine Funktionen definieren können und Unterklassen konkrete Implementierungen bereitstellen.

Java-Schnittstellen und abstrakte Klassen: Offenlegung der inneren Verbindung zwischen ihnen Java-Schnittstellen und abstrakte Klassen: Offenlegung der inneren Verbindung zwischen ihnen Mar 04, 2024 am 09:34 AM

Interface Interface definiert abstrakte Methoden und Konstanten in Java. Die Methoden in der Schnittstelle sind nicht implementiert, sondern werden von der Klasse bereitgestellt, die die Schnittstelle implementiert. Die Schnittstelle definiert einen Vertrag, der erfordert, dass die Implementierungsklasse bestimmte Methodenimplementierungen bereitstellt. Deklarieren Sie die Schnittstelle: publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} Abstrakte Klasse Eine abstrakte Klasse ist eine Klasse, die nicht instanziiert werden kann. Es enthält eine Mischung aus abstrakten und nicht-abstrakten Methoden. Ähnlich wie Schnittstellen werden abstrakte Methoden in abstrakten Klassen durch Unterklassen implementiert. Abstrakte Klassen können jedoch auch konkrete Methoden enthalten, die Standardimplementierungen bereitstellen. Deklarieren Sie die abstrakte Klasse: publicabstractcl

See all articles