Avatar billede Mik2000 Professor
20. november 2014 - 14:17 Der er 5 kommentarer og
1 løsning

Property som navn OOP

Hej

Jeg har følgende
$id = $Query[0]->adminid;

Ovenstående henter adminid fra en forspørgsel der har været kørt, og det virker fint.

Men nu har jeg lavet en property kaldet
$idfield med værdien 'adminid'

Nu vil jeg så gerne have den henter den fra den property, så jeg kan ændre den til f.eks. userid i stedet. Men det kan jeg ikke få til at virke.

Jeg har prøvet:
$id = $Query[0]->{$this->idfield};

Det virker dog ikke. Skal lige hurtigt sige at $this->idfield virker fint og udskriver adminid hvis det køres for sig selv.

Så spørgsmålet:
Hvad skal jeg skrive i stedet for {$this->idfield} for at få den til at aggere som hvis der bare stod adminid eller hvad der eller måtte kunne være i min variabel.

Håber I forstår spørgsmålet - ellers så skriv endelig
Avatar billede repox Seniormester
20. november 2014 - 14:39 #1
Kan du forklare hvordan det skal bruges? Umiddelbart virker det ineffektivt? Hvordan vil du bruge det uden for dit objekt?
Avatar billede Mik2000 Professor
20. november 2014 - 19:06 #2
Det er fordi jeg har en class til login, som skal kunne bruges uanset hvem der logger ind.
Tabellerne har forskellige feltnavne alt efter om det er admin, user etc. Jeg har ikke mulighed for at have dem i en tabel og f.eks. styre det med en level eller lign. da det er helt forskellige oplysninger der gemmes mv.

Så har jeg en class der hedder admin og en der hedder user som står for de andre ting der også er i forbindelse med dem. De extender login, og deres properties "kommer derfor med over i login".

For så at kunne lave login neutral, så har jeg feltnavn liggende som properties i admin og user.

Derfor skal login class kunne bruge en value fra et feltnavn inde i f.eks. et kald som:

$id = $Query[0]->{$this->idfield};

Så selvom den kalder this, så er det jo i virkeligheden admins property eller users property den bruger (pga extend). Af samme grund kan jeg heller ikke skrive den.

Håber det hjalp lidt - ellers spørg endelig :)
Avatar billede arne_v Ekspert
20. november 2014 - 19:17 #3
Det er klart som blaek.

:-)

Er det bare:

$id = $Query[0]->idfield

du leder efter?
Avatar billede Mik2000 Professor
20. november 2014 - 20:24 #4
Hej

Tak for jeres svar. Er næsten flov over at skrive det, men det var faktisk

$id = $Query[0]->{$this->idfield};
... som var det jeg brugte


Jeg havde simpelthen en fejl i et feltnavn i forspørgslen - hmmm belastende - men det virker nu.
Avatar billede Mik2000 Professor
21. november 2014 - 00:53 #5
Lukker - beklager jeg tog jeres tid på sådan dummert :(
Avatar billede arne_v Ekspert
21. november 2014 - 04:11 #6
Saa du har noget kode a la:


<?php
class Login {
}

class User extends Login {
    public $userid;
    public $idfield = 'userid';
    public function __construct($userid) {
        $this->userid = $userid;
    }
}

class Admin extends Login {
    public $adminid;
    public $idfield = 'adminid';
    public function __construct($adminid) {
        $this->adminid = $adminid;
    }
}

$q = array();
$q[] = new admin(1);
$q[] = new user(2);

foreach($q as $q1) {
    echo $q1->{$q1->idfield} . "\r\n";
}
?>


Det ville jeg lave anderledes:


<?php
abstract class Login {
    public abstract function getId();
}

class User extends Login {
    public $userid;
    public function __construct($userid) {
        $this->userid = $userid;
    }
    public function getId() {
        return $this->userid;
    }
}

class Admin extends Login {
    public $adminid;
    public function __construct($adminid) {
        $this->adminid = $adminid;
    }
    public function getId() {
        return $this->adminid;
    }
}

$q = array();
$q[] = new admin(1);
$q[] = new user(2);

foreach($q as $q1) {
    echo $q1->getId() . "\r\n";
}
?>
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

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