Avatar billede snakebyte Nybegynder
08. oktober 2007 - 10:15 Der er 13 kommentarer og
1 løsning

Erklæring af "ukendte" klasser

Hej

Kan man i PHP erklære klasser der er ukendte ved kompilering ?
Eks:

$myclass1 = new Class() //kendt
$myclass2 = new "...."; //ukendt
Avatar billede erikjacobsen Ekspert
08. oktober 2007 - 11:47 #1
Hvad er formålet?
Avatar billede snakebyte Nybegynder
08. oktober 2007 - 12:31 #2
eks: afhængig af hvad $language er sat til skal den lave en new på den pågældende klasse
class Config {
var $language = 'en_US';
...
if( file_exists( "language/Lang_{$this->language}.php" ) ) {
  include 'language/Lang_en_US.php';
  $this->lang = new Lang_en_US();
}
else {
  include "language/Lang_{$this->language}.php";
  $this->lang = 'Lang_'. $this->language;
}


}
Avatar billede nielle Nybegynder
08. oktober 2007 - 21:53 #3
Alternativ 1)

Du kan jo bruge det samme navn for alle dine sprogklasser - så længe du ikke har brug for at include to forskellige sprogklasser på een gang, vil det ikke give kollisioner.

2) ... ellers burde det vust kunne gøre med en eval():

class Config {
    var $language = 'en_US';
    ...
    if (file_exists("language/Lang_en_US.php")) { // ...OGSÅ ÆNDRET HER...
        include 'language/Lang_en_US.php';
        $this->lang = new Lang_en_US();
    }
    else {
        include "language/Lang_{$this->language}.php";
        $this->lang = eval("return new Lang_{$this->language}()";
    }
}
Avatar billede nielle Nybegynder
16. oktober 2007 - 09:23 #4
Er du kommet vidre med denne her?
Avatar billede snakebyte Nybegynder
22. oktober 2007 - 08:06 #5
Hej
Ja undskyld den lange ventetid, men jeg er først lige kommet hjem fra efterårsferie :-)

Nå men jeg har nu testet eval(...) metoden og det giver følgende fejl:
syntax error, unexpected $end in Config.php(41) : eval()'d code on line 1

Jeg har kopieret det kode der er i ovenstående else statement. Include virker fint, men den vil ikke godtage eval ??
Avatar billede snakebyte Nybegynder
22. oktober 2007 - 08:09 #6
if all else failes read the f...... manual.
Jeg har selv fundet fejlen nu. Der manglede et semikolon inde i den tekststreng der skal evalueres.
Så dit eksempel ser ud til at virke - mange tak herfra.
Avatar billede nielle Nybegynder
22. oktober 2007 - 08:59 #7
Der var vis også en lille fehler:

$this->lang = eval("return new Lang_{$this->language}()";

- til:

$this->lang = eval("return new Lang_{$this->language}()");
Avatar billede snakebyte Nybegynder
22. oktober 2007 - 14:33 #8
Der er stadig en fejl :-)

$this->lang = eval("return new Lang_{$this->language}()");
skal være:
$this->lang = eval("return new Lang_{$this->language}();");
Avatar billede snakebyte Nybegynder
22. oktober 2007 - 14:34 #9
hvordan tildeler jeg liiige dig de points der er sat på spil for dit svar ??
Avatar billede nielle Nybegynder
22. oktober 2007 - 16:21 #10
Der skal ligge et svar på spørgsmålet før at der kan udeles point. Normalt svare jeg først når det er klart at spørgeren rent faktisk har fået låst sit problem (ved f.eks. at bede om at der lægges et svar).

... men det lyder jo som om at denne her er i hus, så værsgod, et svar :^)
Avatar billede nielle Nybegynder
29. oktober 2007 - 18:39 #11
Så mangler du bare at acceptere mit svar :^)
Avatar billede snakebyte Nybegynder
31. oktober 2007 - 19:01 #12
jeg prøver og prøver - nu har jeg trykket på accepter 4 gange uden at der sker noget ??
Avatar billede pidgeot Nybegynder
31. oktober 2007 - 19:03 #13
Du skal markere hans navn i listen først.

*går igen*
Avatar billede nielle Nybegynder
01. november 2007 - 18:08 #14
Takker for point :^)
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