Kick1 Skrevet 16. april 2006 Del Skrevet 16. april 2006 (endret) (Det var vanskelig å finne en tittel som beskriver problemet skikkelig...) Fra før vet jeg at man kan lage variabler med navn fra andre variabler: $foo = "bar"; ${$foo} = "goo"; // skriver "goo" echo $bar; Kan man bruke en lignende prosedyre for å for eksempel gjøre: class foo_class { var $foo; function __construct() { $this->foo = "goo"; } function show() { echo $this->foo; } } class bar_class { var $foo; function __construct() { $this->foo = "gee"; } function show() { echo $this->foo; } } $class = $_GET['class']; // nå skulle jeg ønske at man kunne gjøre slik, men det kan man jo ikke: $object = new {$class}_class; // viser "goo" hvis $class er "foo", viser "gee" hvis $class er "bar". $object->show(); Jeg klarer ikke å finne ut hvordan man skal gjøre dette... Hvis noen kunne ha kastet lys over saken hadde det vært supert! Endret 16. april 2006 av Kick1 Lenke til kommentar
Ernie Skrevet 16. april 2006 Del Skrevet 16. april 2006 Altså sånt funker ikke "overall", men bare til funksjoner. Har slitt en god stund for å få den til å funke med arrayer, men ga opp. Man kan bare lage variabler ser det ut som. Lenke til kommentar
Kick1 Skrevet 16. april 2006 Forfatter Del Skrevet 16. april 2006 (endret) Går det an å gjøre det med et eval()-kall, for eksempel? EDIT: Never mind. Fant ut at man kan gjøre $class = $_GET['class']."_class"; $object = new $class; Det var ikke verre. Endret 16. april 2006 av Kick1 Lenke til kommentar
dabear Skrevet 16. april 2006 Del Skrevet 16. april 2006 (endret) Vel, om du ikke må lag et objekt ut av det, og det er greit at metodene blir kalt uten referanse, kan du bruke denne: $class = $_GET['class']; call_user_func(array($class, 'show')); Husk å implementere en eller annen sjekk før klassen blir kalt. Et annet alternativ må vel være å bruke eval, sjøl om jeg sterkt fraråder dette i de fleste tilfeller. edit: ALT for treig Endret 16. april 2006 av dabear Lenke til kommentar
Ernie Skrevet 16. april 2006 Del Skrevet 16. april 2006 (endret) Går det an å gjøre det med et eval()-kall, for eksempel? 5931698[/snapback] Joa, men guuuuuud så stygt. eval("\$object = new {$class}_class;"); Edit: Eller slik du gjorde det. Endret 16. april 2006 av Ernie Lenke til kommentar
CruellaDeVille Skrevet 17. april 2006 Del Skrevet 17. april 2006 (Det var vanskelig å finne en tittel som beskriver problemet skikkelig...) Fra før vet jeg at man kan lage variabler med navn fra andre variabler: $foo = "bar"; ${$foo} = "goo"; // skriver "goo" echo $bar; Kan man bruke en lignende prosedyre for å for eksempel gjøre: class foo_class { var $foo; function __construct() { $this->foo = "goo"; } function show() { echo $this->foo; } } class bar_class { var $foo; function __construct() { $this->foo = "gee"; } function show() { echo $this->foo; } } $class = $_GET['class']; // nå skulle jeg ønske at man kunne gjøre slik, men det kan man jo ikke: $object = new {$class}_class; // viser "goo" hvis $class er "foo", viser "gee" hvis $class er "bar". $object->show(); Jeg klarer ikke å finne ut hvordan man skal gjøre dette... Hvis noen kunne ha kastet lys over saken hadde det vært supert! 5931561[/snapback] Jeg vet det ikke var spørsmålet ditt, men jeg har en liten kommentar. Koden din er en blanding av php4 og php5, det vil si du bruker var $foo og __construct. I php5 (som tydligvis serveren din har, ellers ville den klikket på __construct) bruker man innkapsling istedet for var. Du kan også bruke arv, for å slippe å skrive så mye kode. Eksempelvis kan klassene dine skrives slik: <?php class Foo_class { protected $foo; public function __construct() { $this->foo = "goo"; } public function show() { echo $this->foo; } } class Bar_class extends Foo_class{ public function __construct() { $this->foo = "gee"; } } $class = $_GET['class']."_class"; $object = new $class; $object->show(); ?> Sånn hvis du har tenkt å leke med php5 er dette gode tanker å ta med. Lenke til kommentar
Kick1 Skrevet 17. april 2006 Forfatter Del Skrevet 17. april 2006 Ja, se der ja! Takk for tips og råd. Har php4 på pc'en min, og php5 på webserveren jeg kjører på, så ikke rart jeg blir litt forvirra Det med arv ser slett ikke dumt ut, det må jeg lære meg. (og så må jeg få oppdatert til php5 ) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå