Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Na contruct lege waarde

Pagina: 1
Acties:

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 12:27

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik ben mij een beetje aan het verdiepen in het oob concept van PHP. Wat ik graag wil is dat een waarde van een sessie wordt gebruikt en daarna in de functies kan worden aangeroepen. Ik krijg echter altijd een lege waarde terug. Ook als de $_SESSION['username'] gevuld is. Wat doe ik verkeerd?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class ACL
{
    public $username;

    function __construct()
    {
        if (isset($_SESSION['username'])) {
            $this->username = $_SESSION['username'];
        }

    }

    function getUserName()
    {
        return $this->username;
    }

}

?>

http://www.xbmcfreak.nl/


  • BeRtjh
  • Registratie: Juli 2009
  • Laatst online: 16-07-2023
De constructor in php is een vaste methode met de naam __construct, niet __constructor. Heb je tevens gecontroleerd of session_start(); aangeroepen wordt?

  • Biersteker
  • Registratie: Juni 2009
  • Nu online
Misschien een leuke om wat php oop skill op te pakken.
YouTube: PHP OOP Experiment: Text based CLI game
Wel CLI trouwens.

Originally, a hacker was someone who makes furniture with an axe.


  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Is dit voorbeeld puur voor lering ende vermaak of heb je daar ook echt een doel mee? Het lijkt mij dan namelijk overbodig om je $_SESSION waarde in de construct te plaatsen aangezien het een superglobal is.

telefoontoestel


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 12:27

Erhnam

het Hardware-Hondje :]

Topicstarter
Ja want ik wil het op een centrale plek kunnen aanpassen, stel dat een COOKIE een alternatieve wens is. Door het als GLOBAL los aan te roepen vanuit iedere pagina geeft meer werk.

http://www.xbmcfreak.nl/


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Dan doe je dat niet door je class $_SESSION uit te laten lezen maar door de benodigde waarde door te geven aan de class door middel van een parameter. Je class zou geen enkel benul moeten hebben van waar de waarde vandaan komt, juist omdat het later inderdaad zomaar eens uit $_COOKIE zou kunnen komen. Als dat zo is wil je je applicatie zelf aan moeten passen, niet dit soort classes. Als je vervolgens vanuit meerdere plaatsen in je code diezelfde constructor aanroept moet je ofwel nadenken over of dat wel het juiste model is en als je daarvan overtuigd bent zou je er nog een class tussen kunnen stoppen die dit gedrag voor je opvangt.

Overigens vind ik het ook een beetje dubieus om je class "ACL" te noemen. Er zijn natuurlijk uitzonderingen, maar meestal als je moeite hebt met het verzinnen van een naam die je je in de fysieke wereld kan voorstellen is de class meestal niet goed opgezet. Op basis van de ene functie die ik zie in je startpost vermoed ik dat je een security context probeert te bouwen, dus SecurityContext zou zomaar een betere naam kunnen zijn. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 12:27

Erhnam

het Hardware-Hondje :]

Topicstarter
Bedankt voor de heldere uitleg! SecurityContext dekt de lading beter af. Ik ga nog eens goed nadenken over een goede opzet/structuur. Het idee was meer afkomstig uit een torial van:

http://code.tutsplus.com/...er-login-system--net-3461

Hierin wordt in de contruct de waarde vanuit een Sessie gehaald en gebruikt binnen andere functies van de Class.

http://www.xbmcfreak.nl/


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ik zie dat je de __constructor daar ook vandaan hebt. Alleen al daarom zou ik die site niet meer vertrouwen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
When you call new ACL() in PHP5, the PHP interpreter runs the __constructor() method. However, when you run the same code in PHP4, the interpreter runs ACL(). By providing a method named the same as the class, we make the class PHP4 compatible.
PHP4 :D Oude shit. Noem aub alle constructors gewoon __construct() en gebruik nooit meer een methodname gelijk aan de class name.

En als je oop wil leren: Dat kan uberhaupt pas een beetje sinds PHP5 en daarmee is een PHP4 compatible tutorial echt een no-go. En werkelijk niemand zou er slechter van woorden als dergelijk oude tutorials vh internet zou verdwijnen.

{signature}


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Voutloos schreef op donderdag 17 april 2014 @ 15:32:
[...]

En als je oop wil leren: Dat kan uberhaupt pas een beetje sinds PHP5 en daarmee is een PHP4 compatible tutorial echt een no-go. En werkelijk niemand zou er slechter van woorden als dergelijk oude tutorials vh internet zou verdwijnen.
Amen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1