Avatar billede jmorten Nybegynder
03. oktober 2010 - 13:54 Der er 8 kommentarer og
1 løsning

Brug samme objekt gennem hele scriptet

Jeg har følgende problem, når jeg prøver at oprette et objekt bliver objktet ikke kørt som samme objekt længere nede i scriptet...

Kan ikke se hvad problemet er..

Her er noget kode:

<?php
class Database {

static $Connections = array();

    static function Connection($Database) {
        $AllowedTypes = array("mysql","xml","json");

        if(in_array($Database, $AllowedTypes)){
            if(!is_object(Database::$Connections[$Database])){
              return new $Database;
            }else{
              return Database::$Connections[$Database];
            }
        }else{
            Throw new Exception(Language::$Word['Error100']);
        }
    }
}





class xml {
public $hej = "tekst";
}

class mysql {

}

//START 3 KLASSER
$klasse = Database::Connection(xml);
$klasse1 = Database::Connection(xml);
$klasse2 = Database::Connection(mysql);

//SE OM KLASSERNE ER SAT
print_r($klasse);
print_r($klasse1);
print_r($klasse2);



//SAMMENLIGN
echo "<br>";
if($klasse === $klasse1){
    echo "Ens";
}else{
    echo "Ikke ens";
}

$klasse->hej = "ny tekst";

//SE OM TEKSTEN AENDRES I BEGGE KLASSER
echo "<br>";
print_r($klasse);
print_r($klasse1);
?>
Avatar billede repox Seniormester
03. oktober 2010 - 14:51 #1
Sikke mange PHP notifikationer du har fået dig der... men det har du åbenbart ikke slået til... Prøv denne kode istedet:
<?php
class Database {

static $Connections = array();

    static function Connection($Database)
    {
        $AllowedTypes = array("mysql","xml","json");
       
        if( !in_array($Database, $AllowedTypes) )
            Throw new Exception(Language::$Word['Error100']);   
       
        if( !isset( self::$Connections[$Database] ) )
                self::$Connections[$Database] = new $Database;

            return self::$Connections[$Database];
           
    }
}



class xml {
public $hej = "tekst";
}

class mysql {

}

//START 3 KLASSER
$klasse = Database::Connection("xml");
$klasse1 = Database::Connection("xml");
$klasse2 = Database::Connection("mysql");

//SE OM KLASSERNE ER SAT
print_r($klasse);
print_r($klasse1);
print_r($klasse2);



//SAMMENLIGN
echo "<br>";
if($klasse === $klasse1){
    echo "Ens";
}else{
    echo "Ikke ens";
}

$klasse->hej = "ny tekst";

//SE OM TEKSTEN AENDRES I BEGGE KLASSER
echo "<br>";
print_r($klasse);
print_r($klasse1);
?>
Avatar billede jmorten Nybegynder
03. oktober 2010 - 17:48 #2
Hvad er det jeg har gjordt galt??!

nb. det virker læg et svar!
Avatar billede jmorten Nybegynder
03. oktober 2010 - 17:50 #3
Hvorfor ikke bruge {} ?
Avatar billede jmorten Nybegynder
03. oktober 2010 - 17:57 #4
Forresten mht. notifikationer hvad er det jeg skal ændre i php.ini ?
Avatar billede repox Seniormester
03. oktober 2010 - 18:27 #5
Den overordnede fejl var at du returnerede et nyt objekt hver gang. Du satte aldrig nogle elementer i dit Connections array, hvilket så fik din if( !is_object() ) til at validere hver gang. og så returnerede du bare endnu et nyt objekt.

Hvad mener du med "Hvorfor ikke bruge {}?"?

Din error_reporting skal sættes til E_ALL | E_STRICT
Avatar billede jmorten Nybegynder
03. oktober 2010 - 18:30 #6
Bruge {} på if sætningerne...

Man smid lige et svar!
Avatar billede jmorten Nybegynder
03. oktober 2010 - 18:31 #7
men*
Avatar billede repox Seniormester
03. oktober 2010 - 18:50 #8
Jeg kan godt lide at holde tinge simple og korte...
I stedet for at skrive:
if( isset(self::$Connections[$Database]) ) {
  self::$Connections[$database] = new $Database;
}


synes jeg bare det ser mere simpelt og pænt ud at skrive det i kort form:
if( isset(self::$Connections[$Database]) )
  self::$Connections[$database] = new $Database;


Det er ikke mere korrekt end det andet - det er bare en vane...
Avatar billede jmorten Nybegynder
03. oktober 2010 - 19:20 #9
Det var fordi jeg havde lavet en fejl med {} jeg ikke fik det samme resultat...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester