2012-08-01 2 views
6

Ich lerne über Module online und es scheint wie Module in js und Klassen in PHP sind sehr ähnlich. Beide Gruppen funktionieren zusammen, um die Codierung leichter zu verstehen. Funktionen können in beiden deklariert und öffentlich oder privat gemacht werden. Wie sind sie ähnlich in der Anwendung und wie unterscheiden sie sich?Was ist der Unterschied zwischen Modulen in js und Klassen in PHP?

+1

Keine direkte Antwort, aber Klassen dienen nicht nur dazu, Funktionen leichter verständlich zu machen. Ihr Hauptzweck ist die Abstraktion (Verstecken von Implementierungsdetails), die Kapselung (die nur bestimmte Aktionen für jedes Objekt erlaubt) und die Modularität (die jede Klasse leicht portierbar macht). – Palladium

Antwort

2

Javascript-Module bietet einige nette Funktionen wie Kapselung, den privaten Zustand und sogar die Vererbung von anderen Modulen. Während sie einige der Funktionen von Klassen bereitstellen, wie in PHP, sind sie nicht. Sie versuchen, auf der vorhandenen Javascript-Funktionalität aufzubauen, um Klassen zu emulieren, daher die Verwirrung. d.h. sie sind gebaut, um wie Klassen aussehen und fühlen.

Javascript-Module sind Instanzen einer anonymen Funktion, die einer Variablen zugewiesen ist. Daher haben sie alle Funktionen einer Funktion, deren Code von oben nach unten ausgeführt wird, sie haben und verwenden manchmal eine return-Anweisung (in PHP-Klassen können keine Anweisungen direkt neben Felddefinition und -zuweisung ausgeführt werden) und sie haben sogar Zugriff auf globale Variablen. In PHP hingegen kann eine Klasse oder besser gesagt Methoden nicht auf eine Variable zugreifen, die nicht in der Klasse selbst enthalten ist. Um auf globale Variablen zugreifen zu können, muss eine Klassenmethode oder statische Funktion explizit die Variable d. H. global $a aufrufen, um sie zu importieren. In JS-Modulen sind alle globalen Variablen zugänglich, aber manchmal wählt man sie explizit für den besseren Code (function(a){})(imported);

Ein anderes wichtiges Problem ist die Datenabstraktion. Während js-Module private Zustände für die Felder bereitstellen, bieten die PHP-Klassen, genau wie C++, Java, Python usw., mehr Sicherheit für die Eigenschaften. Es ermöglicht Basisklassen mit den Schlüsselwörtern abstract class und interface, wobei Klassenmethoden und -attribute nur definiert oder strukturiert, aber nicht verwendet werden.

PHP-Klassen haben auch Konstruktoren und Destruktoren, die beim Initialisieren des Klassenobjekts und bei der letzten Erwähnung des Objekts aufgerufen werden. Zugegeben, Sie können Funktionen in Modulen erstellen, um sie auszuführen, in PHP dagegen werden Funktionen in der Methode nur ausgeführt, wenn sie entweder vom Objekt, der Klasse oder anderen Funktionen aufgerufen werden.

In Klassen gibt es statische Funktionen, diese können aufgerufen werden, ohne auch nur ein Objekt der Klasse zu haben und unabhängig von Objekten zu laufen, andererseits ist in js alles ein Objekt; welches den Punkt statischer Funktionen besiegt.

Sie sind ähnlich in der: Beide haben Vererbung, wo Sie ein vorhandenes Modul mit einem neuen erweitern können, und in PHP können Sie extends verwenden, um von einer Elternklasse zu erben. Sie haben beide private Datenzustände, die den externen Zugriff verhindern, sie gruppieren und verpacken Daten und Methoden, und beide sind bei richtiger Verwendung großartig.

Verwandte Themen