2017-09-04 7 views
1

Ich habe 2 Klassen, in denen Eltern von Kind geerbt werden.Argumente an übergeordneten Klassenkonstruktor in PHP übergeben?

class parentClass 
{ 
    private $table_name=''; 

    public function __construct($argument) 
    { 
     $this->table_name=$argument; 
     echo $this->table_name; 
    } 
} 

class child extends parentClass 
{ 
    private $table="student"; 

    public function __construct() 
    { 
     parent::__construct($this->table); 
    } 
} 

Es gibt einige, was unten, dass wie dies muss verwendet werden, aber ich bin nicht in der Lage zu verstehen, wie und warum.

$args = func_get_args(); 
call_user_func_array(array($this, 'parent::__construct'), $args); 

Helfen Sie mir als

Was der richtige Code sollte die richtige Logik und bitte unterstützen sie mit einem Verweis zu erreichen, ein besseres Verständnis zu gewinnen.

+1

Eigentlich ist das Konzept der Vererbung ein bisschen anders, man kann den Konstruktor nicht direkt aufrufen, wird automatisch aufgerufen wird. Um das Argument $ in der Elternklasse weiterzugeben, müssen Sie es in der Kindklasse angeben. – Merv

+0

@Merv ich einige, wie der Wert von ** $ Tabelle ** zu ** $ table_name **, d. H. Kind zum Elternteil bewegen müssen. –

+2

@Merv der Konstruktor der übergeordneten Klasse könnte automatisch nur aufgerufen werden, wenn es kein Argument hat. Aber auch in diesem Fall funktioniert PHP nicht so. Der Programmierer muss den Konstruktor der Elternklasse explizit im Konstruktor der abgeleiteten Klasse aufrufen. – axiac

Antwort

0

Keine direkte Antwort, aber wenn ich den Code richtig lese, möchten Sie nicht wirklich eine Variable/Wert an den Konstruktor übergeben. Stattdessen möchten Sie eine feste Klasseneigenschaft wie einen Tabellennamen übergeben.

In diesem Fall könnten Sie eine Konstante in der Kindklasse verwenden und diese im Konstruktor des Elternelements festlegen. Die untergeordnete Klasse benötigt keinen separaten Konstruktor, wenn dies alles ist, was Sie tun möchten.

So something like:

class parentClass 
{ 
    private $table_name; 

    function __construct() { 
     $this->table_name = static::TABLE; 
     echo $this->table_name; 
    } 
} 

class childClass extends parentClass 
{ 
    const TABLE = "student"; 
} 

$obj = new childClass(); 
+2

Danke, Mann, Sie haben tatsächlich meine Frage, Im Falle eines Arrays muss ich dies tun (Ich denke) definieren ("FRUITS", serialisieren (Array ("Apfel", "Kirsche", "Banane"))); $ my_fruits = unserialize (FRUITS); –

+1

@AbhijitSrivastava Nein, eine Konstante kann sein Ein Array, das nicht serialisiert und deserialisiert werden muss – jeroen

+0

Es muss keine Klassenkonstante sein.Ein einfaches altes Eigentum wird gut tun. – salathe

Verwandte Themen