PHP: OOP förstöra ett objekt.

Här diskuteras programmering och utveckling
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

PHP: OOP förstöra ett objekt.

Inlägg av Christian Holmberg »

Låt oss säga jag har definierat ett objekt så här:

Kod: Markera allt

    class TPostContent {
        
        // Variable for entering the blogg
        var $Title;
        var $Date;
        var $Content;
        
        // db variable
        var $dbConnection;
        var $db;
        var $query;
        
        function __construct ( $aTitle, $aDate, $aContent ) {
            
            $this->Title = $aTitle;
            $this->Date = $aDate;
            $this->Content = $aContent;
                    
            $this->dbConnection = mysql_connect("localhost", "user", "< cencur ;-) >") or die("mysql error: " . mysql_error());            
            $this->db = mysql_select_db("Blogg1", $this->dbConnection ) or die("mysql error: " . mysql_error());       
            
            $this->query = "INSERT INTO BloggPost (Title, Date, Content) VALUES ('{$Title}', '{$Date}', '{$Content}')";
            mysql_query($this->query);
        }
        
        function __destruct() {
            mysql_close($this->$dbConnection);
        }
    }
Att skapa ett objekt av den klassen är simpelt:

Kod: Markera allt

 
      $Blogg = new TPostContent("En titlel", "idag", "En massa text och min livs historia");
Men hur förstör jag den så att destruktorn annropars? Är det via funktionen unset()? Exempel

Kod: Markera allt

    unset($Blogg);
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: PHP: OOP förstöra ett objekt.

Inlägg av Christian Holmberg »

Hittade följande kod på http://se.php.net/manual/sl/migration5.oop.php

Kod: Markera allt

<?php
class MyDestructableClass {
    function __construct() {
        print "In constructor\n";
        $this->name = "MyDestructableClass";
    }

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

$obj = new MyDestructableClass();
?> 
vilket ger ut matningen

Kod: Markera allt

In constructor Destroying MyDestructableClass 
Betyder detta att destruktorn anropars när objektet inte lägre andvänds eller hur fungerar det?
Edit: Google menar att destruktueraren anropars när objektet är "out of scoop" och i praktiken innebär detta vad?
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: PHP: OOP förstöra ett objekt.

Inlägg av Christian Holmberg »

Tror jag håller mig till strukturerad programmering eller vad det kallas i mitt projekt. OOP känns lite överkurs än så länge.
KiviE
Inlägg: 2157
Blev medlem: 25 okt 2007, 14:00
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Luleå

Re: PHP: OOP förstöra ett objekt.

Inlägg av KiviE »

Christian Holmberg skrev:Men hur förstör jag den så att destruktorn annropars?
När alla referenser till objektet är borta så förstör objektet sig själv verkar det som.

http://ca.php.net/manual/en/language.oop5.decon.php
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed or in any order in shutdown sequence.
Användarvisningsbild
micke_nordin
Inlägg: 1539
Blev medlem: 21 aug 2008, 17:03
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: PHP: OOP förstöra ett objekt.

Inlägg av micke_nordin »

Christian Holmberg skrev: Betyder detta att destruktorn anropars när objektet inte lägre andvänds eller hur fungerar det?
Edit: Google menar att destruktueraren anropars när objektet är "out of scoop" och i praktiken innebär detta vad?
Är inte så haj på PHP men jag gissar att det t.ex. betyder att om du deklarerar en objekt i ett visst block så anropas destruktorn när programmet går utanför det blocket.

Kod: Markera allt

while(nånting är sant)
{
    skapar objektet som bara kommer finnas i while-loopen;
    gör så att nånting är falskt;
} 
destruktorn för objektet har nu anropats och objektet finns inte mer
typ...

/Micke
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: PHP: OOP förstöra ett objekt.

Inlägg av Christian Holmberg »

Tack för svaren. Har även kommit underfull med att unset() går även att andvända för att förstöra objekt när man själv känner för det :D .

Kod: Markera allt

<?php 
    class TMyObj {
        var $MyVar;
        function __construct ( $number ) {
            $this->MyVar = $number;
            echo "inside construct: ". $this->MyVar . "<br />";   
        }
        function __destruct () {
            echo "inside destruct: " . $this->MyVar  . "<br />";
        }
    }
    
    $MyObj = new TMyObj("first");
    // unset($MyObj);
    
    $i = 0;
    while ( $i < 3 ) {
        $MyObj2 = new TMyObj($i);
        $i++;
    }
?>

<?php 
    
    $MyObj3 = new TMyObj("Second");

?>
Ger utmatingen:

Kod: Markera allt

inside construct: first
inside construct: 0
inside construct: 1
inside destruct: 0
inside construct: 2
inside destruct: 1
inside construct: Second
inside destruct: Second
inside destruct: 2
inside destruct: first
När man tar bort kommentaren så får man följande utmatning:

Kod: Markera allt

inside construct: first
inside destruct: first
inside construct: 0
inside construct: 1
inside destruct: 0
inside construct: 2
inside destruct: 1
inside construct: Second
inside destruct: Second
inside destruct: 2
Skriv svar

Återgå till "Programmering och webbdesign"