Just nu i M3-nätverket
Gå till innehåll

En fråga om destructor


mac3

Rekommendera Poster

Hejsan på er, det var längesen.
Jag har byggt ett mvc och det fungerar fint fint.  
Jag har gjort en karta över körningen.  när jag se på den uppfattar jag att klass Siterouter destruct() körs två gånger 
men när jag bug testar då visar det att den körs en gång. 

 

som jag uppfattar 

jag skapar ett objekt av class pages som ärva Siterouter

då blir väl att Siterouter destruct() körs  när pages avslutas ( pages har ingen destructor).

i Siterouter destruct()  inkluderar jag klassen controllern och skapar ett objekt av controllern 
som ärva icontroller och icontroller  ärver från Siterouter klassen.

i  icontroller finns det en destructor.

 

//pages ärver  Siterouter och körs 

// controller ärver icontroller ärver Siterouter och körs 

// icontroller destruct()
// Siterouter destruct()

// Siterouter destruct()

 

hur kommer sig att den körs en gång? 
 

mvh

marcus

 

marcus 

post-61368-0-60868800-1404753969_thumb.png

Länk till kommentar
Dela på andra webbplatser

Animal interface

<?php

interface Animal {
    public function __construct();
    public function walk();
    public function __destruct();
} 

Dog class implementing Animal

<?php

require_once("Animal.php");

class Dog implements Animal {
    public function __construct() {
        echo "Dog constructor<br>";
    }

    public function walk() {
        echo "Dog is walking<br>";
    }

    public function __destruct() {
        echo "Dog is destroyed<br>";
    }

}

Chihuahua extending Dog

<?php
require_once("Dog.php");

class Chihuahua extends Dog {
    public function __construct() {
        parent::__construct();
        echo "Chihuahua is constructed<br>";
    }

    public function __destruct() {
        parent::__destruct();
        echo "Chihuahua is destroyed<br>";
    }

    public function walk(){
        parent::walk();
        echo "Chihuahua is walking by talking small steps<br>";
    }
}

Index.php playing with the classes

<?php
require_once("Chihuahua.php");

$dog = new Chihuahua();
$dog->walk();
$dog = null;

Output

Dog constructor
Chihuahua is constructed
Dog is walking
Chihuahua is walking by taking small steps
Dog is destroyed
Chihuahua is destroyed
Länk till kommentar
Dela på andra webbplatser

Tar du bort parent::__construct, parent::walk & parent::__destruct() från Chihuahua, så blir outputen följande

Chihuahua is constructed
Chihuahua is walking by taking small steps
Chihuahua is destroyed

Med andra ord så är klassmetoderna i PHP "virtuella" by nature.

 

För att bekräfta, ta bort walk() metoden från Chihuahua så blir outputen istället

Chihuahua is constructed
Dog is walking
Chihuahua is destroyed
Länk till kommentar
Dela på andra webbplatser

  • 1 month later...

Hejsan tack för ditt svar 
förlåt att inte jag besvara tidigare , jag trodde att fråga var för svår att svara på.

iallafall jag gjorde några tester , jag kom fram till detta här var snabbare (se på bilden )

  

post-61368-0-35500300-1409140169_thumb.png

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...