webForumDet fria alternativet

class extends

PHP

2 svar · 812 visningar · startad av grennfox

Medlem sedan feb. 2010177 inlägg
Frågan#1

Hallå

Jag håller på att försöka lära mig det här med class extends, men har kört fast lite här nu.

Så om jag har en kod som ser ut som följande:
page.php

class Page{
protected $hello
function __construct(){
     $this->hello = 'hello';
}
}

view.php

class View extends Page{
function __construct(){
     echo $this->hello;
}
}

När den här koden körs så händer ingenting, men jag läste något om att om man har en __construct i en klass som ärver så måste man även köra parent:: __construct eller något liknande för att kunna komma åt variabel i huvud klassen.

Men det som ställer till det i mitt huvud är att den klassen körs redan från en annan sida. Blir det inte någon krock då?

Skulle någon vänlig själ vilja förklara detta för mig?

Tackar så mycket på förhand :)

Medlem sedan feb. 20005 891 inlägg
#2

__construct() är PHP klass-konstruktor, dvs. den funktion som alltid körs när du skapar ett nytt objekt av klassen. Men om du inte skapar en konstruktor så skapas ju ändå objektet! Det är för att du genom att skapa din egen explicita konstruktor själv definierar hur du vill initiera objekt.'

"Extends" är PHPs nyckelord för att ärva, så i din definition säger du "View ärver Page och alla dess metoder och variabler", men konstruktorn är fortfarande explicit satt eftersom du definierar en sådan metod.

"parent::" betyder att du vill accessa "förälderns", dvs. klassen du ärvers, metod, och i detta fall innebär det att du begär att köra Pages konstruktor. Därför skrivs inget ut om du inte anropar parent::__construct().

Medlem sedan feb. 2010177 inlägg
#3

aha då blev jag lite klokare :) Tackar så mycket för ett snabbt och bra svar :)

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)