Latest web development tutorials
×

PHP Kurs

PHP Kurs PHP Kurze Einführung PHP installieren PHP Grammatik PHP Variable PHP echo/print PHP Datentypen PHP Konstante PHP Schnur PHP Die Betreiber PHP If...Else PHP Switch PHP Feld PHP Sortieren eines Array PHP Superglobals PHP While Verkehr PHP For Verkehr PHP Funktion PHP Magische Variablen PHP Namespaces PHP Objektorientiert

PHP Form

PHP Form PHP Formularauthentifizierung PHP Form - Erforderliche Felder PHP Form - Überprüfung E-Mail und URL PHP Komplette Formularinstanz PHP $_GET Variable PHP $_POST Variable

PHP Erweiterte Tutorial

PHP Mehrdimensionale Arrays PHP Datum PHP enthalten PHP Datei PHP Datei-Upload PHP Cookie PHP Session PHP E-mail PHP Sicherheit E-mail PHP Error PHP Exception PHP Filter PHP Erweiterte Filter PHP JSON

PHP 7 Neue Funktionen

PHP 7 Neue Funktionen

PHP Datenbank

PHP MySQL Kurze Einführung PHP MySQL Verbindung PHP MySQL Erstellen einer Datenbank PHP MySQL Erstellen Sie eine Datentabelle PHP MySQL einfügen von Daten PHP MySQL Legen Sie mehrere Daten PHP MySQL Prepared Statements PHP MySQL Lesen Sie Daten PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX Kurze Einführung AJAX PHP AJAX Datenbank AJAX XML AJAX Echtzeitsuche AJAX RSS Reader AJAX Abstimmung

PHP Referenzhandbuch

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Bildverarbeitung PHP RESTful

PHP objektorientiert

In der objektorientierten Programmierung (englisch: objektorientierte Programmierung, Abkürzung: OOP) ist das Objekt eine Beschreibung der Informationen und Informationsverarbeitung eines Ganzen besteht, ist die reale Welt Abstraktion.

Dinge sind Objekte in der realen Welt, die wir, wie Computer, Fernseher, Fahrräder stehen.

Drei wichtige Eigenschaften des Objekts:

  • Verhalten des Objekts: ein Objekt, das auf den Betrieb angewendet werden kann, das Licht an, schalten Sie das Licht aus ist das Verhalten.
  • Form-Objekt: Wenn diese Methoden anwenden, wie auf das Objekt, Farbe, Größe, Form zu reagieren.
  • Darstellung des Objekts: ein Objekt das Äquivalent von Identität darstellt, und zwar unterscheiden, was im gleichen Verhalten und Zustand unterschiedlich ist.

Zum Beispiel, Tier (Tier) ist eine abstrakte Klasse, können wir mit einem Hund ein Schaf spezifisch sein, und der Hund mit den Schafen ist ein spezifisches Ziel, sie ein Farbattribut haben, können Sie schreiben, können Sie andere Staatsakte laufen.


Objektorientierte Inhalte

  • Klasse - definiert die abstrakten Merkmale eines Dinges.Klassendefinition enthält die Formulardaten und Operationen an Daten.

  • Objekte - ist eine Instanz der Klasse.

  • Mitglied Variablen - Variablen innerhalb der Klasse definiert.Der externe Wert der Variablen ist nicht sichtbar, kann aber durch Mitgliederfunktionen zugegriffen werden kann, nachdem die Klasse als ein Objekt instanziiert wird, können die Eigenschaften des Objekts eine Variable aufgerufen werden.

  • Member - Funktion- innerhalb der Klasse definiert sind, können für den Datenzugriff Objekte verwendet werden.

  • Vererbung - Vererbung ist eine Unterklasse von automatischen Austausch von Datenstrukturen und Methoden der Elternklasse, die eine Beziehung zwischen den Klassen ist.Bei der Definition und Implementierung einer Klasse, können sie in einer solchen Basis kommen existiert bereits durchgeführt, das bereits vorhandene Klasse, wie durch den Inhalt ihres Inhalts definiert, und einige neue Inhalte hinzufügen.

  • Übergeordnete Klasse - eine Klasse von anderen Klassen geerbt, kann die Klasse aufgerufen werden die Elternklasse, Gruppe oder Klasse oder Oberklasse.

  • Subclass - eine Klasse , die eine andere Klasse erbt eine Unterklasse kann auch eine abgeleitete Klasse genannt genannt werden.

  • Polymorphismus - Polymorphismus bezieht sich auf die gleiche Operation oder Funktion kann der Prozess zu den mehreren Arten von Objekten angewandt werden und unterschiedliche Ergebnisse erhalten.Verschiedene Objekte, erhalten Sie die gleiche Nachricht zu unterschiedlichen Ergebnissen führen können, wird dieses Phänomen genannt Polymorphismus.

  • Überlastung - Kurz, es ist eine Funktion oder Methode mit dem gleichen Namen, aber der Parameterliste ist nicht die gleiche Situation, wie eine Funktion oder Methode zwischen den verschiedenen Parametern des gleichen Namens, die jeweils überladene Funktion oder Methode aufgerufen wird .

  • Abstract - Die abstrakte bezieht sich konsistente Datenstruktur mit (Attribute) und Verhalten (Operationen) von Objekten in Klassen.Eine solche Klasse ist eine Abstraktion, es spiegelt die wichtigen Eigenschaften der Anwendung zugeordnet, während andere, nicht verwandte Inhalte zu ignorieren. Jede Klasseneinteilung ist subjektiv, sondern muss auf die jeweilige Anwendung bezogen werden.

  • Package - Paket bezieht sich auf die Eigenschaften und das Verhalten eines Objekts in der realen Welt existiert , in einer logischen Einheit zusammen und platziert zu binden.

  • Constructor - in erster Linie verwendet , um das Objekt zu initialisieren , wenn Sie ein Objekt erstellen, wird das Objekt einen Anfangswert der Membervariable zugewiesen, immer die Objekterstellung Aussage mit dem neuen Betreiber.

  • Destruktor - destructor (destructor) und der Konstruktor Im Gegensatz dazu , wenn das Objekt Ende seines Lebenszyklus (zum Beispiel, wo das Objekt ein Funktionsaufruf abgeschlossen ist ), das System automatisch destructor ausführt.Destruktoren werden oft zu machen "säubern die Folgen von" Arbeit (zum Beispiel, wenn Sie ein Objekt erstellen, mit einem neuen up Speicherplatz geöffnet sollte Release im Destruktor verwendet werden, löschen vor dem Beenden) verwendet.

Die folgende Abbildung erstellen wir drei Objekte Car-Klasse: Mercedes, BMW und Audi.

$mercedes = new Car ();
$bmw = new Car ();
$audi = new Car ();


PHP Klassendefinition

PHP benutzerdefinierte Klasse in der Regel Syntax lautet wie folgt:

<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>

Wie folgt interpretiert:

  • Nach der Klasse ,die Klasse Schlüsselwort und den Namen der Klassendefinition verwendet wird .

  • Ein Paar von Klammern nach dem Namen der Klasse können Variablen und Methoden ({}) innerhalb definieren.

  • Klassenvariablenvar Variablen zu deklarieren , können auch Werte initialisiert werden.

  • PHP Funktionsdefinition ist ähnlich wie die Definition der Funktion, die Funktion kann nur durch die Klasse und ihre instanziierten Objekte zugegriffen werden.

Beispiele

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
     echo $this->url . PHP_EOL;
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}
?>

$ Diese Variable ihre Objekte darstellen.

PHP_EOL Newline.


PHP-Objekte zu erstellen

Nachdem die Klasse erstellt wird, können wir denneuen Betreiber verwenden , um ein Objekt der Klasse instanziiert:

$w3big = new Site;
$taobao = new Site;
$google = new Site;

Der obige Code wir drei Objekte zu erstellen, wobei jeder der drei Objekte sind unabhängig, dann betrachten wir, wie Member-Methoden und Membervariablen zugreifen.

Anrufe Mitglied Verfahren

Nachdem das Objekt instanziiert wird, können wir das Objekt verwenden, um ein Mitglied Methode aufrufen, kann das Verfahren des Objekts nur ein Mitglied des Betätigungselements Größe des Objekts sein:

// 调用成员函数,设置标题和URL
$w3big->setTitle( "本教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );

$w3big->setUrl( 'www.w3big.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );

// 调用成员函数,获取标题和URL
$w3big->getTitle();
$taobao->getTitle();
$google->getTitle();

$w3big->getUrl();
$taobao->getUrl();
$google->getUrl();

Der vollständige Code ist wie folgt:

Beispiele

<? Php
Klasse - Site {
/ * * Mitglied Variablen /
var $ url;
var $ title;

/ * Member - Funktion * /
Funktion setUrl ($ par) {
$ This -> url = $ par ;
}

Funktion getUrl () {
echo $ this -> url PHP_EOL. ;
}

Funktion setTitle ($ par) {
$ This -> title = $ par ;
}

Funktion getTitle () {
echo $ this -> Titel PHP_EOL. ;
}
}

$ W3big = new - Site;
$ Taobao = new - Site;
$ Google = new - Site;

// Member - Funktion aufgerufen , um den Titel und die URL zu setzen
$ W3big -> setTitle ( "Tutorium");
$ Taobao -> setTitle ( "Taobao");
$ Google -> setTitle ( "Google Search");

$ W3big -> setUrl ( 'www.w3big.com ');
$ Taobao -> setUrl ( 'www.taobao.com ');
$ Google -> setUrl ( 'www.google.com ');

// Member - Funktion Rufen Sie den Titel und die URL zu erhalten
$ W3big -> getTitle ();
$ Taobao -> getTitle ();
$ Google -> getTitle ();

$ W3big -> getUrl ();
$ Taobao -> getUrl ();
$ Google -> getUrl ();
?>

Ausführung einer Instanz »

Die Umsetzung des obigen Codes ist die Ausgabe:

本教程
淘宝
Google 搜索
www.w3big.com
www.taobao.com
www.google.com

PHP-Konstruktor

Constructor ist eine spezielle Methode. Vor allem das Objekt verwendet zu initialisieren, wenn Sie ein Objekt erstellen, wird das Objekt einen Anfangswert der Membervariable zugewiesen, immer mit dem neuen Betreiber die Objekterstellung Anweisung verwenden.

PHP 5 ermöglicht es Entwicklern, eine Methode Zeile in einer Klasse zu definieren, wie ein Konstruktor Syntax lautet wie folgt:

void __construct ([ mixed $args [, $... ]] )

Im obigen Beispiel können wir die $ url und $ titel über den Konstruktor initialisiert werden:

function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}

Jetzt brauchen wir nicht die Methode setTitle und setUrl zu nennen:

Beispiele

$ W3big = new Webseiten ( "www.w3big.com ',' Tutorial ');
$ Taobao = new Webseiten ( "www.taobao.com ',' Taobao ');
$ Google = new Webseiten ( "www.google.com ", "Google Suche");

// Member - Funktion Rufen Sie den Titel und die URL zu erhalten
$ W3big-> getTitle ();
$ Taobao-> getTitle ();
$ Google-> getTitle ();

$ W3big-> getUrl ();
$ Taobao-> getUrl ();
$ Google-> getUrl ();

Ausführung einer Instanz »

destructor

Destructor (destructor) und der Konstruktor Im Gegensatz dazu, wenn das Objekt Ende seines Lebenszyklus (zum Beispiel, wo das Objekt ein Funktionsaufruf abgeschlossen ist), das System automatisch destructor ausführt.

PHP 5 führt das Konzept eines destructor, die zu anderen objektorientierten Sprachen ähnlich ist, die Syntax ist wie folgt:

void __destruct ( void )

Beispiele

<?php
class MyDestructableClass {
   function __construct() {
       print "构造函数\n";
       $this->name = "MyDestructableClass";
   }

   function __destruct() {
       print "销毁 " . $this->name . "\n";
   }
}

$obj = new MyDestructableClass();
?>

Die Umsetzung des obigen Codes ist die Ausgabe:

构造函数
销毁 MyDestructableClass

ererben

PHP Schlüsselwortextends eine Klasse zu erben, PHP keine Mehrfachvererbung, in folgendem Format unterstützt:

class Child extends Parent {
   // 代码部分
}

Beispiele

Beispiel Child_Site Klasse erbt die Klasse Standort und erweitert die Funktionalität:

<?php 
// 子类扩展站点类别
class Child_Site extends Site {
   var $category;

	function setCate($par){
		$this->category = $par;
	}
  
	function getCate(){
		echo $this->category . PHP_EOL;
	}
}

Methode überschreibt

Wenn Sie nicht auf die Bedürfnisse der eine Unterklasse von der übergeordneten Klasse erbt Verfahren erfüllen kann, kann es neu geschrieben werden, einen Prozess namens Overlay-Verfahren (Überschreibung), die auch als übergeordnete Verfahren bekannt.

Beispiel neu geschrieben getUrl und getTitle Methoden:

function getUrl() {
   echo $this->url . PHP_EOL;
   return $this->url;
}
   
function getTitle(){
   echo $this->title . PHP_EOL;
   return $this->title;
}

Access Control

PHP auf der Eigenschaft oder eine Methode der Zugriffskontrolle durch das Hinzufügen von Keywords vor der Öffentlichkeit erreicht wird (öffentlich), geschützt (geschützt) oder private (privat) zu erreichen.

  • öffentlichen (Public): public class Mitglied kann überall zugegriffen werden.
  • geschützt (geschützt): geschützte Klasse Mitglied kann durch seine eigene sowie die Unterklasse und der übergeordneten Klasse zugegriffen werden.
  • Private (privat): privat Teilnehmer kann nur zugegriffen werden , wenn der Klassendefinition.

Zugriffskontrollattribute

Class-Attribut muss als public, protected, private ein definiert werden. Wenn mit dem var definiert ist, wird es öffentlich betrachtet.

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2 和 Undefined

?>

Zugriffskontrollmethoden

Methode in der Klasse als public definiert sein, privat oder geschützt. Wenn Sie nicht setzen diese Schlüsselwörter, die Methode standardmäßig öffentlich.

<?php
/**
 * Define MyClass
 */
class MyClass
{
    // 声明一个公有的构造函数
    public function __construct() { }

    // 声明一个公有的方法
    public function MyPublic() { }

    // 声明一个受保护的方法
    protected function MyProtected() { }

    // 声明一个私有的方法
    private function MyPrivate() { }

    // 此方法为公有
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // 公有,受保护,私有都可以执行


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 此方法为公有
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }

    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>

Schnittstelle

Mit Hilfe der Schnittstelle (Interface) können Sie festlegen, welche Methoden eine Klasse implementieren muss, müssen aber nicht den konkreten Inhalt dieser Methoden zu definieren.

Die Schnittstelle wird durchdas Schlüsselwort interfacedefiniert, wie die Definition eines Standard - Klasse, die aber definiert alle Methoden leer sind.

Alle Methoden in der Schnittstelle definiert sind öffentlich sein, die von der Schnittstelle charakteristisch ist.

eine Schnittstelle, verwenden Sie dieArbeitsgeräte Operator zu implementieren.Die Klasse muss alle Methoden in einer Schnittstelle definiert implementieren, oder aber einen fatalen Fehler berichten. Klasse kann mehrere Schnittstellen implementieren, verwenden Sie Kommas, um die Namen von mehreren Schnittstellen zu trennen.

<?php

// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

Konstante

Sie können die Klasse setzen in die gleichen Werte wie Konstanten definiert bleibt. Bei der Definition und Verwendung der Zeitkonstanten müssen nicht das $ Symbol zu verwenden.

Der Wert der Konstante muss ein fester Wert sein, nicht um eine Variable, Klasse Attribute, mathematische Ergebnisse oder Funktionsaufruf.

Seit PHP ab 5.3.0, können Sie eine Variable verwenden, um dynamisch die Klasse aufrufen. Aber der Wert der Variablen kann kein Schlüsselwort (wie self, Eltern oder statisch) sein.

Beispiele

<?php
class MyClass
{
    const constant = '常量值';

    function showConstant() {
        echo  self::constant . PHP_EOL;
    }
}

echo MyClass::constant . PHP_EOL;

$classname = "MyClass";
echo $classname::constant . PHP_EOL; // 自 5.3.0 起

$class = new MyClass();
$class->showConstant();

echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
?>

Abstrakte Klasse

Jede Klasse, wenn es mindestens eine Methode als abstrakt deklariert ist, dann ist diese Klasse muss als abstrakt deklariert werden.

Ist definiert als eine abstrakte Klasse nicht instanziert werden kann.

Ist definiert als eine abstrakte Methode nur seinen Aufruf erklärt (Parameter), können Sie die spezifische Funktion Implementierung nicht definieren.

Inherit eine abstrakte Klasse, Unterklasse müssen alle abstrakten übergeordneten Klasse Methodendefinitionen, darüber hinaus den Zugriff auf diese Methoden der Kontrolle und der übergeordneten Klasse muss gleich (oder mehr entspannt) sein. Zum Beispiel ist eine abstrakte Methode deklarierten geschützt, so wird die Methode in der Unterklasse implementiert als Schutz oder public deklariert werden, kann aber nicht als privat definiert werden. Auch nach der Methode aufgerufen werden, müssen übereinstimmen, dh die Art und Anzahl der erforderlichen Parameter übereinstimmen müssen. Zum Beispiel definiert eine Unterklasse einen optionalen Parameter sowie die Erklärung der Elternklasse abstrakte Methode gibt es keine, dann gibt es keinen Konflikt zwischen den beiden Aussagen.

<?php
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . PHP_EOL;
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>

Die Umsetzung des obigen Codes ist die Ausgabe:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Static Schlüsselwort

Deklarieren Klasse Eigenschaften oder Methoden als statische (Static), können Sie die Klasse und den direkten Zugriff nicht instanziiert.

Statische Eigenschaft durch eine Klasse kann nicht Objekt Zugriff instanziert werden (aber statische Methode kann).

Da statische Methoden nicht zu nennen durch das Objekt benötigt, die Pseudo-Variable $ ist dies in einer statischen Methode nicht zur Verfügung.

Für den Zugriff auf den Operator> - Statische Eigenschaft nicht von dem Thema.

Seit PHP ab 5.3.0, können Sie eine Variable verwenden, um dynamisch die Klasse aufrufen. Aber der Wert der Variablen kann kein Schlüsselwort selbst, Eltern oder statisch sein.

<?php
class Foo {
  public static $my_static = 'foo';
  
  public function staticValue() {
     return self::$my_static;
  }
}

print Foo::$my_static . PHP_EOL;
$foo = new Foo();

print $foo->staticValue() . PHP_EOL;
?>	

Das obige Programm, das Ausgabe ist:

foo
foo

Final Schlüsselwort

PHP 5 fügt ein Schlüsselwort final. Wenn die übergeordnete Klasse Methode final deklariert, kann die Unterklasse diese Methode nicht außer Kraft setzen. Wenn eine Klasse als final deklariert, kann es nicht vererbt werden.

Der folgende Code-Ausführungsfehler:

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called" . PHP_EOL;
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called"  . PHP_EOL;
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called"  . PHP_EOL;
   }
}
// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Rufen Sie den übergeordneten Klasse Konstruktor

PHP nicht automatisch den Konstruktor der in der Unterklasse übergeordneten Klasse Konstruktor aufrufen. Um den übergeordneten Klasse Konstruktor ausführen, müssen wir dieEltern in den Konstruktor der Unterklasse :: __ construct ().

<?php
class BaseClass {
   function __construct() {
       print "BaseClass 类中构造方法" . PHP_EOL;
   }
}
class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();  // 子类构造方法不能自动调用父类的构造方法
       print "SubClass 类中构造方法" . PHP_EOL;
   }
}
class OtherSubClass extends BaseClass {
    // 继承 BaseClass 的构造方法
}

// 调用 BaseClass 构造方法
$obj = new BaseClass();

// 调用 BaseClass、SubClass 构造方法
$obj = new SubClass();

// 调用 BaseClass 构造方法
$obj = new OtherSubClass();
?>

Das obige Programm, das Ausgabe ist:

BaseClass 类中构造方法
BaseClass 类中构造方法
SubClass 类中构造方法
BaseClass 类中构造方法