Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in objektorientiertes Wissen für PHP-Interviews

Einführung in objektorientiertes Wissen für PHP-Interviews

不言
不言nach vorne
2019-02-13 15:20:076318Durchsuche

Der Inhalt dieses Artikels ist eine Einführung in objektorientiertes Wissen über PHP-Interviews. Ich hoffe, er wird Ihnen als Referenz dienen.

Zu den allgemeinen objektorientierten Wissenspunkten in PHP-Prüfungen gehören die folgenden 7 Punkte. Ich werde die folgenden Punkte im Detail vorstellen, um Ihnen zu helfen, die allgemeinen objektorientierten Wissenspunkte in PHP-Prüfungsfragen besser zu bewältigen.

Verwandte Empfehlungen: „ Zusammenfassung der PHP-Interviewfragen im Jahr 2019 (Sammlung)

Die Inhaltsmodule, die an der Struktur des gesamten objektorientierten Artikels beteiligt sind sind:

1. Was ist der Unterschied zwischen objektorientiert und prozessorientiert?
2. Was sind die Merkmale der Objektorientierung?
3. Was sind Konstruktoren und Destruktoren?
4. Was sind die objektorientierten Bereiche?
5. Was sind die magischen Methoden in PHP?
6. Was ist Objektklonen?
7. Was ist der Unterschied zwischen mir selbst und den Eltern?
8. Was sind die Unterschiede und Verbindungen zwischen abstrakten Klassen und Schnittstellen?
9. Erläuterung häufiger Fragen zu PHP-Objektorientierung

Der Inhalt zu PHP-Objektorientierung wird in drei Artikel unterteilt, um den gesamten Inhalt zu erläutern Erklärt hauptsächlich den Inhalt von eins bis vier Punkten, der zweite Artikel erklärt hauptsächlich den Inhalt von fünf bis acht Punkten und der dritte Artikel konzentriert sich auf den neunten Punkt.

Der Inhalt des folgenden Textes stammt aus dem Buch „PHP Programmer Interview Written Test Guide“ . Wenn Sie es erneut drucken, behalten Sie bitte die Quelle:

1 . Objektorientiert und prozessorientiert Was ist der Unterschied?

Objektorientiert ist heute eine der gängigen Methoden der Softwareentwicklung. Sie fügt Daten und Operationen auf Daten als ein voneinander abhängiges Ganzes, also ein Objekt, zusammen. Abstrahieren Sie die gemeinsamen Merkmale ähnlicher Objekte, also Klassen. Die meisten Daten in der Klasse können nur von den Methoden dieser Klasse verarbeitet werden. Die Klasse bezieht sich über eine einfache externe Schnittstelle auf die Außenwelt, und Objekte kommunizieren über Nachrichten. Der Programmablauf wird während der Nutzung vom Benutzer bestimmt. Aus abstrakter Sicht haben Menschen beispielsweise spezielle Namen wie Größe, Gewicht, Alter, Blutgruppe usw. Menschen können arbeiten, aufrecht gehen, essen und ihren eigenen Verstand nutzen, um Werkzeuge herzustellen. Menschen sind nur eine Abstraktion Es handelt sich um eine nicht existierende Entität, aber alle Objekte mit den Eigenschaften und Methoden der menschlichen Gruppe werden Menschen genannt. Diese Objektperson ist eine tatsächlich existierende Entität, und jeder ist ein Objekt der menschlichen Gruppe.
Prozessorientiert ist eine ereignisorientierte Entwicklungsmethode, die eine sequenzielle Top-Down-Ausführung und schrittweise Verfeinerung bedeutet. Die Programmstruktur ist nach Funktionen in mehrere Grundmodule unterteilt, und diese Module bilden eine Baumstruktur Modul ist relativ einfach und relativ unabhängig in der Funktion. Jedes Modul besteht im Allgemeinen aus drei Grundstrukturen: Sequenz, Auswahl und Schleife. Die spezifische Methode der modularen Implementierung besteht in der Verwendung von Unterprogrammen und dem Programmablauf. Dies wird beim Schreiben des Programms festgelegt. Beim Backgammon besteht die prozessorientierte Designidee darin, zunächst die Schritte des Problems zu analysieren: Im ersten Schritt wird das Spiel gestartet; im dritten Schritt wird das Bild gezeichnet; Schritt: Beurteilen Sie den Gewinner oder verlieren Sie. Schritt 6: Zeichnen Sie das Bild. Schritt 8: Geben Sie das Endergebnis aus. Die Implementierung jedes der oben genannten Schritte mit separaten Funktionen ist eine prozessorientierte Entwicklungsmethode.

Konkret unterscheiden sich die beiden vor allem in den folgenden Aspekten.
1) Die Ausgangspunkte sind unterschiedlich. Objektorientiert bedeutet, konventionelle Denkmethoden zu verwenden, um Probleme in der objektiven Welt zu behandeln, wobei der Schwerpunkt auf der direkten Zuordnung der Schlüsselpunkte der Problemdomäne zu Objekten und den Schnittstellen zwischen Objekten liegt. Dies ist bei der prozessorientierten Methode nicht der Fall. Sie betont die Abstraktion und Modularisierung des Prozesses. Sie konstruiert oder behandelt objektive Weltprobleme mit dem Prozess als Zentrum.
2) Die hierarchischen logischen Beziehungen sind unterschiedlich. Die objektorientierte Methode verwendet Computerlogik, um die physische Existenz in der objektiven Welt zu simulieren, verwendet die Sammlungsklasse von Objekten als Grundeinheit für die Verarbeitung von Problemen und macht die Computerwelt so nah wie möglich an der objektiven Welt Um die Problemverarbeitung klarer zu gestalten, verwendet die objektorientierte Methode direkt die hierarchische Struktur von Klassen, um die Vererbung und Entwicklung zwischen Klassen widerzuspiegeln. Die Grundeinheit der prozessorientierten Methode zur Behandlung von Problemen ist ein Modul, das den Prozess klar und genau ausdrücken kann. Die hierarchische Struktur des Moduls wird verwendet, um die Beziehungen und Funktionen zwischen Modulen oder Modulen sowie die Probleme in der objektiven Welt zusammenzufassen werden in Prozesse abstrahiert, die von Computern verarbeitet werden können.
3) Die Datenverarbeitungsmethode unterscheidet sich von der Steuerungsprogrammmethode. Die objektorientierte Methode kapselt die Daten und den entsprechenden Code in ein Ganzes. Im Prinzip können andere Objekte ihre Daten nicht direkt ändern, dh die Änderung des Objekts kann nur durch seine eigenen Mitgliedsfunktionen abgeschlossen werden Das Programm wird durch „ereignisgesteuert“ aktiviert und ausgeführt. Die prozessorientierte Methode verarbeitet Daten direkt über das Programm, und die Verarbeitungsergebnisse können nach Abschluss der Verarbeitung angezeigt werden. Bei der Steuerungsprogrammmethode wird das Programm je nach Entwurf aufgerufen oder zurückgegeben und kann nicht frei navigiert werden steuert, kontrolliert und ruft zwischen den einzelnen Modulen auf.
4) Analysedesign und Codierungskonvertierungsmethoden sind unterschiedlich. Die objektorientierte Methode ist ein reibungsloser Prozess über den gesamten Software-Lebenszyklus zwischen Analyse, Design und Codierung. Von der Analyse über das Design bis hin zur Codierung wird eine konsistente Modelldarstellung verwendet, d. h. eine nahtlose Verbindung wird erreicht. Der prozessorientierte Ansatz betont die regelkonforme Transformation zwischen Analyse, Design und Codierung und erreicht eine nahtlose Verbindung zwischen Analyse, Design und Codierung über den gesamten Softwarelebenszyklus.

2. Was sind die Merkmale der Objektorientierung?


Die Hauptmerkmale der Objektorientierung sind Abstraktion, Vererbung, Kapselung und Polymorphismus.

1) Abstraktion. Abstraktion ist der Prozess, bei dem diejenigen Aspekte eines Themas ignoriert werden, die für das aktuelle Ziel irrelevant sind, um den Aspekten, die für das aktuelle Ziel relevant sind, mehr Aufmerksamkeit zu schenken. Die Abstraktion hat nicht die Absicht, das gesamte Problem zu verstehen, sondern wählt nur einen Teil davon aus und lässt einige Details vorerst weg. Die Abstraktion umfasst zwei Aspekte: Der eine ist die Prozessabstraktion und der andere die Datenabstraktion.

2) Vererbung. Vererbung ist ein hierarchisches Modell, das Klassen verbindet und die Wiederverwendung von Klassen ermöglicht und fördert. Es bietet eine Möglichkeit, Gemeinsamkeiten klar auszudrücken. Eine neue Klasse eines Objekts kann von einer vorhandenen Klasse abgeleitet werden, ein Prozess, der als Klassenvererbung bezeichnet wird. Die neue Klasse erbt die Eigenschaften der ursprünglichen Klasse. Die neue Klasse wird als abgeleitete Klasse (Unterklasse) der ursprünglichen Klasse bezeichnet, und die ursprüngliche Klasse wird als Basisklasse (übergeordnete Klasse) der neuen Klasse bezeichnet. Eine abgeleitete Klasse kann Methoden und Instanzvariablen von ihrer Basisklasse erben, und Unterklassen können Methoden ändern oder neue hinzufügen, um speziellen Anforderungen besser gerecht zu werden.
3) Kapselung. Kapselung bezieht sich auf die Abstraktion objektiver Dinge in Klassen, und jede Klasse schützt ihre eigenen Daten und Methoden. Klassen können nur vertrauenswürdigen Klassen oder Objekten erlauben, ihre Daten und Methoden zu betreiben und nicht vertrauenswürdige Informationen zu verbergen.
4) Polymorphismus. Polymorphismus bezieht sich darauf, dass Objekte verschiedener Klassen auf dieselbe Nachricht reagieren können. Polymorphismus umfasst parametrisierten Polymorphismus und enthaltenen Polymorphismus. Polymorphe Sprachen bieten die Vorteile von Flexibilität, Abstraktion, Verhaltensfreigabe und Codefreigabe und können das Problem gleichnamiger Anwendungsfunktionen gut lösen.

3. Was sind Konstruktoren und Destruktoren?

1. Konstruktor

In Versionen vor PHP5 muss der Name des Konstruktors mit dem Namen der Klasse identisch sein. Ab PHP5 können Entwickler eine Methode namens __construct als Konstruktor definieren. Die Funktion des Konstruktors soll automatisch aufgerufen werden, wenn die Klasse instanziiert wird. Daher wird der Konstruktor hauptsächlich für einige Initialisierungsarbeiten verwendet. Ein Vorteil der Verwendung von __construct als Name des Konstruktors besteht darin, dass bei einer Änderung des Klassennamens der Name des Konstruktors nicht geändert werden muss. Seine Deklarationsform ist
void __construct ([ gemischt $args [, $... ]] )

In der Sprache C++ ruft der Konstruktor der Unterklasse implizit die Parameterlose Funktion der übergeordneten Klasse auf Konstrukteur. In PHP ruft der Konstruktor einer Unterklasse jedoch nicht implizit den Konstruktor der übergeordneten Klasse auf. Entwickler müssen den Konstruktor der übergeordneten Klasse explizit über parent::__construct() aufrufen. Wenn eine Unterklasse keinen Konstruktor definiert, erbt sie den Konstruktor der übergeordneten Klasse. Voraussetzung ist jedoch, dass der Konstruktor der übergeordneten Klasse nicht als privat definiert werden kann. Das Anwendungsbeispiel lautet wie folgt:

<?php    
    class BaseClass {
        function __construct() {
            print "Base constructor\n";
        }
    }
    class SubClass extends BaseClass {
        function __construct() {
            parent::__construct();
            print "Sub constructor\n";
        }
    }
    // 会调用父类构造函数
    $obj = new BaseClass();
    //调用子类构造函数,子类构造函数会去调用父类构造函数
    $obj = new SubClass();
?>

Das laufende Ergebnis des Programms ist

Base constructor
Base constructor
Sub constructor

从上面的讲解中可以发现,从PHP5开始多了一种构造函数定义的方法。为了实现不同版本PHP代码的兼容,在PHP5的类中找不到 __construct() 函数并且也没有从父类继承一个的话,那么它就会尝试寻找旧式的构造函数(与类同名的函数)。这种兼容的方法存在一个风险:在PHP5之前的版本中开发的类中已有一个名为 __construct() 的方法却被用于其他用途时,PHP5的类会认为这是一个构造函数,从而当类实例化时自动执行这个方法。
从 PHP 5.3.3 开始,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

2.析构函数

析构函数是在PHP5引入的,它的作用与调用时机和构造函数刚好相反,它在对象被销毁时自动执行。析构函数__destruct()结构形式如下:

function __destruct(){
    /* 类的初始化代码*/
}

需要注意的是,析构函数是由系统自动调用的,因此,它不需要参数。
默认情况下,系统仅释放对象属性所占用的内存,并不销毁在对象内部申请的资源(例如,打开文件、创建数据库的连接等),而利用析构函数在使用一个对象之后执行代码来清除这些在对象内部申请的资源(关闭文件、断开与数据库的连接)。
与构造函数类似,如果想在子类中调用父类的析构函数,那么需要显式地调用:parent::__destruct()。如果子类没有定义析构函数,那么它会继承父类的析构函数。
当对象不再被引用时,将调用析构函数。如果要明确地销毁一个对象,那么可以给指向对象的变量不分配任何值,通常将变量赋值为NULL或者用unset()函数。示例代码如下:

<?php 
    class des{
        function __destruct(){
            echo "对象被销毁,执行析构函数<br>";
        }
    }
    $p=new des(); /* 实例化类 */
    echo "程序开始<br>";
    unset($p); /* 销毁变量$p */
    echo "程序结束";
?>

四、面向对象的作用域范围有哪几种?

在PHP5中,类的属性或者方法主要有public、protected和private三种类作用域,它们的区别如下:
1)public(公有类型)表示全局,类内部、外部和子类都可以访问。
默认的访问权限为public,也就是说,如果一个方法没有被public、protected或private修饰,那么它默认的作用域为public。
2)protected(受保护类型)表示受保护的,只有本类或子类可以访问。
在子类中,可以通过self::var或self::method访问,也可以通过parent::method来调用父类中的方法。
在类的实例化对象中,不能通过$obj->var来访问protected类型的方法或属性。
3)private(私有类型)表示私有的,只有本类内部可以使用。
该类型的属性或方法只能在该类中使用,在该类的实例、子类、子类的实例中都不能调用私有类型的属性和方法。


Das obige ist der detaillierte Inhalt vonEinführung in objektorientiertes Wissen für PHP-Interviews. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen