2017-03-18 2 views
0

Angenommen, die folgende Struktur:PHP Vererbung - Zugang Eltern Eigenschaften

<?php 
class Event_Dates { 

    public $start_date; 

    public $end_date; 

    public function __construct($start = null, $end = null){ 
     $this->start_date = $start; 
     $this->end_date = $end; 
    } 

    public function get_start_date(){ 
     return $this->start_date; 
    } 

    public function get_end_date(){ 
     return $this->end_date; 
    } 
} 


class Event_Times extends Event_Dates 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function get_parent_start_date(){ 
     return $this->start_date; 
    } 

    public function get_parent_end_date(){ 
     return $this->end_date; 
    } 
} 
?> 

Hier ist mein Client-Code:

<?php 
$start = "2017-03-12 04:00:00"; 
$end = "2017-03-12 17:00:00"; 
$event_dates = new Event_Dates($start, $end); 
$event_times = new Event_Times(); 
?> 

Und die Tests:

<?php 
var_dump($event_dates->get_start_date()); // string(19) "2017-03-12 04:00:00" 
var_dump($event_dates->get_end_date()); // string(19) "2017-03-12 17:00:00" 
var_dump($event_times->get_parent_start_date()); // NULL 
var_dump($event_times->get_parent_end_date()); // NULL 
?> 

Soweit ich sehen kann, , Verwende ich die Eigenschaften der Vererbung korrekt. Warum kann ich nicht auf die Eigenschaften der Elternklasse über meine Kindklasse zugreifen?

+0

Ihre 'parent :: __ construct();' macht keinen Sinn, im Moment – RomanPerekhrest

Antwort

1

Sie missverstehen die Vererbung vollständig und verwirren Klassendefinitionen mit Instanzen .... jede Instanz, die Sie erstellen, ist einzigartig und hat ihre eigenen Eigenschaftswerte; Sie erstellen jedoch keine separaten Instanzen für jede Klasse innerhalb der Vererbungsstruktur und erwarten, dass sie aufeinander zugreifen.

Eine Instanz der Kind-Klasse erbt die Eigenschaften und Methoden der Elternklasse

class Event_Dates { 

    public $start_date; 

    public $end_date; 

    public function __construct($start = null, $end = null){ 
     $this->start_date = $start; 
     $this->end_date = $end; 
    } 

    public function get_start_date(){ 
     return $this->start_date; 
    } 

    public function get_end_date(){ 
     return $this->end_date; 
    } 
} 


class Event_Times extends Event_Dates 
{ 
    public function __construct($start = null, $end = null) 
    { 
     parent::__construct($start, $end); 
    } 

    public function get_parent_start_date(){ 
     return $this->start_date; 
    } 

    public function get_parent_end_date(){ 
     return $this->end_date; 
    } 
} 

$start = "2017-03-12 04:00:00"; 
$end = "2017-03-12 17:00:00"; 
$events = new Event_Times($start, $end); 


var_dump($events->get_start_date()); // string(19) "2017-03-12 04:00:00" 
var_dump($events->get_end_date()); // string(19) "2017-03-12 17:00:00" 
var_dump($events->get_parent_start_date()); string(19) "2017-03-12 04:00:00" 
var_dump($events->get_parent_end_date()); string(19) "2017-03-12 17:00:00" 
+0

'get_parent_start_date()' und 'get_parent_end_date()' geben keinen Nutzen als 'Event_Times' Klasse bereits Super Getter vererbt wird. Solcher Override ist eine Verschwendung – RomanPerekhrest

+0

@RomanPerekhrest - ich weiß, aber kurz vor dem Schreiben eines vollständigen Tutorials, ich versuche, den Unterschied zwischen Klassen und Instanzen zu betonen, als eine Möglichkeit zur Erklärung der Vererbung –

+0

@RomanPerekrest - 'get_parent_start_date()' & ' get_parent_end_date() 'war lediglich eine Illustration, um den Punkt zu verdeutlichen. Der Punkt, den ich wirklich versuchte, war: "Wie bekomme ich Zugang zu den Elterneigenschaften?" – cookie

1

müssen Sie die $ start_date und $ construct_date angeben, wenn Sie die Event_Times bauen, sonst wird es diese Methode aufrufen, mit die Standardwerte, die in Ihnen Fall null sind

versuchen

class Event_Times extends Event_Dates 
{ 
    private $parent; 
    public function __construct($parent) 
    { 
     $this->start_date = $parent->start_date; 
     $this->end_date = $parent->end_date; 
     } 

    public function get_parent_start_date(){ 
     return $this->start_date; 
    } 

    public function get_parent_end_date(){ 
     return $this->end_date; 
    } 
} 

dann Ihren Code

<?php 
$start = "2017-03-12 04:00:00"; 
$end = "2017-03-12 17:00:00"; 
$event_dates = new Event_Dates($start, $end); 
$event_times = new Event_Times($event_dates); 
?> 
Verwandte Themen