[php] zit een fout in me kleine functie maar waar?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ziet iemand wat ik hier fout doe?
bij ?sub=1 moet dus menu 2 er komen ipv 1.

En als ik $GLOBALS[_GET][sub] verander in $sub werkt het ook niet.

Dat is trouwens me index.php, is me test filetje omdat ik net begonnen ben met functions.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$Menu_outside_class = array ('1' => '<tr><td>menu 1</td></tr>', '2' => '<tr><td>menu 2</td></tr');  

class sample   
{  
    var $content_site_name = "DarkZone ::";  
    var $content_site_copyright = "Copyright 2002 Yeechie Tu.";  
    var $Menu = array ('1' => '<tr><td>menu 1</td></tr>', '2' => '<tr><td>menu 2</td></tr');  
      
    function tplHeader() {  
        echo "<html><head>".  
        "<title>".$this->content_site_name."</title>".  
        "<link rel='stylesheet' href='styles.css' type='text/css'>".  
        "</head><body>".  
        "<div align='center'><table border='0' cellpadding='3' cellspacing='3' width='600' class='main_table'>";  
        if ($GLOBALS[_GET][sub] == "1") {   
            echo $this->$Menu['2'];  
        }   
        else {   
            echo $this->$Menu['1'];   
        }  
        echo "</table>";  
    }  
      
    function tplFooter() {  
        echo "<p>".$this->content_site_copyright."</p></div></body></html>";  
    }  
}  
$Basic = new sample;  
$Basic->tplHeader();  
echo "Below should come array from inside class<br />";  
print_r($Basic->Menu);  
echo "<br /><br />Below should come array from outside class<br />";  
print_r($Menu_outside_class);  
echo "<br /><br />";  
$Basic->tplFooter();  
}  
?>

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

PHP:
1
$_GET['sub']
bedoel je?

maar anyways, het is niet netjes om vanuit een class $_* op te vragen, die moet je altijd doorgeven.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

chem schreef op 27 december 2002 @ 21:05:
maar anyways, het is niet netjes om vanuit een class $_* op te vragen, die moet je altijd doorgeven.
Beetje offtopic, maar: Hoe doe je dat het "beste"? Reference naar de $_GET-array meegeven aan de constructor of alleen de specifieke indices (die je alleen gebruikt) van de $_GET-array meegeven aan de constructor?

[ Voor 4% gewijzigd door Verwijderd op 27-12-2002 21:17 ]


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

je kan specifieke waardes meegeven aan de class-constructor, een array_intersect() van _GET/_POST aan de functie meegeven etc. etc.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
/me is nog php beginner :)

updated code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
/*
Why wont it show menu 1 or menu 2?
*/
class sample 
{
    var $content_site_name = "DarkZone ::";
    var $content_site_copyright = "Copyright 2002 Yeechie Tu.";
    var $Menu = array ('1' => '<tr><td>menu 1</td></tr>', '2' => '<tr><td>menu 2</td></tr');
    
    function tplHeader() {
        echo "<html><head><title>".$this->content_site_name."</title>".
             "<link rel='stylesheet' href='styles.css' type='text/css'>".
             "</head><body>".
             "<div align='center'><table border='0' cellpadding='3' cellspacing='3' width='600' class='main_table'>";
        if ($_GET['sub'] == "1") { 
            echo $this->$Menu['2'];
        } 
        else { 
            echo $this->$Menu['1']; 
        }
        echo "</table>";
    }
    
    function tplFooter() {
        echo "<p>".$this->content_site_copyright."</p></div></body></html>";
    }
}
if ($show == "source") {
show_source("index.php");
}
else {
$Test = new sample;
$Test->tplHeader();
$Test->tplFooter();
}
?>

Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
$_GET en $_POST behoren tot de superglobals en hoef je daarom niet mee te geven aan een functie of class (ze zijn altijd in scope)

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • ThaDaNo
  • Registratie: Mei 2002
  • Laatst online: 05-04-2023
Denk je dat chem dat niet weet ofzo :?

Acties:
  • 0 Henk 'm!

Verwijderd

DaNo2002 schreef op 28 December 2002 @ 10:08:
Denk je dat chem dat niet weet ofzo :?
pff.. |:( staat er ergens dat hij het tegen chem heeft? :| NEE!

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Apollo_Futurae schreef op 27 December 2002 @ 22:36:
$_GET en $_POST behoren tot de superglobals en hoef je daarom niet mee te geven aan een functie of class (ze zijn altijd in scope)

dat is wel correct voor PHP, maar het blijft klunzen. je kunt zo niet in 1 oogopslag zien welke variabelen er door de functie worden gebruikt (adh van de functie-declaratie), maar je moet de hele functie doorlezen voor $-zut.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Godzilla:
pff.. |:( staat er ergens dat hij het tegen chem heeft? :| NEE!

offtopic:
Hou dit soort opmerkingen voor je, alsjeblieft. chem kan zijn eigen boontjes wel doppen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
dat is wel correct voor PHP
we hebben het toch over php, of niet ;)
maar het blijft klunzen. je kunt zo niet in 1 oogopslag zien welke variabelen er door de functie worden gebruikt (adh van de functie-declaratie), maar je moet de hele functie doorlezen voor $-zut.
de superglobals zie ik als omgevingsvariabelen die voor elke functie vrij beschikbaar zijn (om te lezen, dat wel; als je erin wilt schrijven (wat ik eigenlijk alleen doe met $_SESSION) is het netter om er een wrapper class omheen te vouwen en een instance daarvan mee te geven aan welke functie hem ook maar nodig heeft).

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
heb probleem gevonden..

echo $this->$Menu['1'];
echo $this->$Menu['2'];

moet zijn:

echo $this->Menu['1'];
echo $this->Menu['2'];

Acties:
  • 0 Henk 'm!

Verwijderd

Apollo_Futurae schreef op 28 december 2002 @ 14:42:
[...]

de superglobals zie ik als omgevingsvariabelen die voor elke functie vrij beschikbaar zijn (om te lezen, dat wel; als je erin wilt schrijven (wat ik eigenlijk alleen doe met $_SESSION) is het netter om er een wrapper class omheen te vouwen en een instance daarvan mee te geven aan welke functie hem ook maar nodig heeft).
Ja maar globale variabelen in functies gebruiken wordt zowiezo algemeen in meeste progtalen afgeraden, al is het maar om ze te lezen. Het is veel properder programmeren om ze mee te geven in de functie die je wil gebruiken en om dan verder alleen maar met lokale variabelen te werken.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Zoals Apollo_Futurae al zegt: Wanneer je de $_GET, etc... superglobals als constanten beschouwt, en niet als variabelen is het een ander verhaal.

Denk bijvoorbeeld maar aan C/C++, waar vaak macros gedefinieerd worden juist om ze globaal te laten zijn. Beetje slechte vergelijking misschien, maar goed, ik kan me de beweegredenen wel bedenken waarom je $_* vars gewoon superglobal gebruikt :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1