Für PHP-Entwickler ist es relativ schwer sich an die OOP von JavaScript zu gewöhnen. Das liegt daran, dass JavaScript-Klassen Prototype-basiert sind und die Klassen daher anders definiert werden als man es aus PHP, Java oder C# kennt. Um die Umstellung von PHP/Java/C# etwas leichter zu gestalten, habe ich mal ein JavaScript-PHP-Equivalent von zwei einfachen Klassen geschrieben, die exakt das gleiche tun.
Normale Klasse
Fangen wir mal an mit einer einfachen Person-Klasse, die nur einen Namen und die Anrede kennt und die Person ansprechen bzw. verabschieden kann.
Die Klasse in PHP:
<?php class Person { protected $name; protected $gender; public function __construct($name, $gender) { $this->name = $name; $this->gender = $gender; $this->sayHello(); } public function sayHello() { echo "Hallo $this->gender $this->name."; } public function sayGoodbye() { echo "Bis bald $this->gender $this->name."; } } |
Und die gleiche Klasse in JavaScript:
function Person(name, gender) { if(name && gender) { this.name = name; this.gender = gender; this.sayHello(); } } Person.prototype.sayHello = function() { document.write("Hallo "+this.gender+" "+this.name+"."); }; Person.prototype.sayGoodbye = function() { document.write("Bis bald "+this.gender+" "+this.name+"."); }; |
Vererbung
Als nächstes eine einfache Vererbung. Es gibt eine zweite Klasse „Scientist“, die alle Eigenschaften und Methoden von Person erbt und sie um jeweils eine Eigenschaft und eine Methode erweitert.
Vererbung in PHP:
<?php require_once 'Person.php'; class Scientist extends Person { protected $department; public function __construct($name, $gender, $department) { $this->department = $department; parent::__construct($name, $gender); } public function research() { echo "$this->name forscht $this->department."; } } |
Und die gleiche Vererbung in JavaScript:
function Scientist(name, gender, department) { Person.call(this, name, gender); this.department = department; } Scientist.prototype = new Person(); Scientist.prototype.constructor = Scientist; Scientist.prototype.research = function() { document.write(this.name+" forscht "+this.department+"."); }; |
Aufruf der Klassen
Kommen wir nun zum leichtesten Teil – dem Aufruf bzw. Verwendung der Klassen. Hier unterscheiden sich JavaScript und PHP fast gar nicht.
PHP:
$einstein = new Person("Albert Einstein", "Herr"); echo "<br/>"; $einstein->sayGoodbye(); echo "<br/><br/>"; $newton = new Scientist("Isaac Newton", "Herr", "Physik"); echo "<br/>"; $newton->research(); echo "<br/>"; $newton->sayGoodbye(); |
Und in JavaScript:
var einstein = new Person("Albert Einstein", "Herr"); document.write("<br/>"); einstein.sayGoodbye(); document.write("<br/><br/>"); var newton = new Scientist("Isaac Newton", "Herr", "Physik"); document.write("<br/>"); newton.research(); document.write("<br/>"); newton.sayGoodbye(); |
Die Ausgabe ist für beide identisch:
Hallo Herr Albert Einstein. Bis bald Herr Albert Einstein. Hallo Herr Isaac Newton. Isaac Newton forscht Physik. Bis bald Herr Isaac Newton.
Ich hoffe ich konnte euch damit die Unterschiede der beiden Sprachen klar machen. Wer möchte kann sich die Beispiele auch als ZIP-Archiv herunterladen.