Tarvitsen apua kuinka saan muuttujat toimimaan funktioissani.
Luin php oppaan funktioista mutta asia ei täysin avautunut.
<?php $num = (6); /// Käyttäjätaso $level_lower = (1); $level_upper = (5); $admin = (1); $taso2 = (2); $taso3 = (3); $taso4 = (4); $taso5 = (5); $bannattu = (66); function tarkista_taso() { //Tarkastaa Käyttäjän tason. if (($num >= $level_lower) && ($num <= $level_upper) OR ($num == $bannattu) OR ($num == $admin)) { if($num == $bannattu) { echo "Tili Jäädytetty"; } elseif($num == $admin) { echo "Olet Admin"; } elseif($num == $taso2) { echo "Olet tason 2 käyttäjä"; } elseif($num == $taso3) { echo "Olet tason 3 käyttäjä"; } elseif($num == $taso4) { echo "Olet tason 4 käyttäjä"; } elseif($num == $taso5) { echo "olet tason 5 käyttäjä"; } }else { echo "Et ole käyttäjä"; } } tarkista_taso(); function tarkista_admin() { if ($num == $admin) { echo "Olet Admin käyttäjä"; }else { echo "Et ole Admin käyttäjä"; } } tarkista_admin(); function tarkasta_bannit() { if ($num == $bannattu) { echo "Olet Bannattu"; }else { echo "Et ole bannattu"; } } tarkasta_bannit(); ?>
Jos haluat, että globaali muuttuja on käytettävissä funktiossa, niin kerro se funktiossa
Esim:
function tarkista_admin() { global $num, $admin; if ($num == $admin) { echo "Olet Admin käyttäjä"; }else { echo "Et ole Admin käyttäjä"; } }
Toinen juttu sitten on se, että globaaleja muuttujia ylipäätään kannattaisi välttää.
Alussa määritellyt muuttujat ovat globaaleja (koko skriptin laajuisia), joten niiden käyttäminen funktiossa vaatii funktion alkuun vastaavat global-rivit:
// Globaali muuttuja: $käyttöoikeus_bannattu = 66; // Funktio: function tarkasta($taso) { // Globaalin muuttujan liittäminen funktioon: global $käyttöoikeus_bannattu; // Nyt muuttujaa voi käyttää: if ($taso == $käyttöoikeus_bannattu) { echo "Bannattu!\n"; } }
Toisaalta nuo käyttämäsi arvot eivät muutu, joten niiden pitäisikin olla vakioita, jolloin global-rivejä ei myöskään tarvita:
// Globaali vakio: const KÄYTTÖOIKEUS_BANNATTU = 66; // Luokan vakio: class Käyttöoikeus { const BANNATTU = 66; } // Funktio: function tarkasta($taso) { // Globaalin vakion käyttö: if ($taso == KÄYTTÖOIKEUS_BANNATTU) { echo "Bannattu!\n"; } // Luokan vakion käyttö: if ($taso == Käyttöoikeus::BANNATTU) { echo "Bannattu!\n"; } }
Nimien kannattaa olla yksiselitteisiä eikä taso1 jne.
Muuttujat eivät näy funktioiden sisälle. Kannattaa siis lähettää ne funktion parametreinä, esim.
function plusLasku($x, $y){ return $x+$y; } echo '<p>'.plusLasku(1,2).'</p>'; // tai muuttujaan $tulos = plusLasku(3,7); echo '<p>'.$tulos.'</p>';
Vältä globaaleja muuttujien käyttöä. Käytä tilalla vaikkapa vakioita.
edit:
Grez ja Metabolix ennättivätkin
Kiitoksia paljon. Sain näillä koodin toimimaan. Tein Grezin ohjeen mukaan mutta yritän perehtyä viellä Metabolixin ohjeeseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.