Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Apua muuttujien ja funktion kanssa

Rintsi [08.01.2018 04:42:02]

#

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();
?>

Grez [08.01.2018 09:32:03]

#

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ää.

Metabolix [08.01.2018 09:32:57]

#

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.

Lebe80 [08.01.2018 09:34:24]

#

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

Rintsi [09.01.2018 15:44:58]

#

Kiitoksia paljon. Sain näillä koodin toimimaan. Tein Grezin ohjeen mukaan mutta yritän perehtyä viellä Metabolixin ohjeeseen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta