Info over de Scope
Ik ben sinds een paar dagen met OOP begonnen. Het bevalt me eigenlijk goed, en ik vind dat je er erg overzichtelijk mee kan werken. Alleen wat mij nog niet helemaal duidelijk is, is de scope van een class. Ik plaats nu alleen variabele in mijn scope die ik nodig heb in mijn functions en wil beschermen, maar is het niet de bedoeling dat je alle variabele die je gebruikt in je scope moet neerzetten ook bijvoorbeeld een $output?
Alvast bedankt,
Jelle
Daarom even een voorbeeld:
Ik zou het nog even laten zien aan de hand van een voorbeeld wat ik bedoel.
Hieronder ziet u de code waar ik nu mee bezig ben met een aantal functies er in,
zoals als te zien is heb ik in mijn scope alleen de variabele staan die ik beveiligd wil hebben.
In dit geval zijn dat $link en $query, de variabele $output staat er niet in omdat ik deze alleen gebruik voor de uitvoer van html code dus hoeft die ook niet beveiligt te zijn. Mijn vraag was hierbij of ik dat op de juiste manier doe of dat al mijn variabele (dus ook $output) in de scope moeten staan, en niet alleen de genen die beveiligt moesten zijn.
Alvast bedankt,
Jelle.
class database {
protected $link;
protected $query;
function connect($host, $username, $password, $db)
{
$this->link= mysqli_connect($host, $username, $password, $db);
}
function logIn($username, $password)
{
$output ="<form action='index.php' method='post'>
<input type='text' name='username' placeholder='username'/>
<input type='text' name='password' placeholder='password'/>
<input type='submit' value='Log in'/>
</form> ";
if($username)
{
$username = mysqli_real_escape_string($this->link, $username);
$password = mysqli_real_escape_string($this->link, $password);
$this->query = mysqli_query($this->link, "SELECT username, password FROM user WHERE username = $username AND password = '$password'");
while($row = mysqli_fetch_array($this->query))
{
$_SESSION['id'] = $row['id'];
$_SESSION['voornaam'] = $row['voornaam'];
$_SESSION['achternaam'] = $row['achternaam'];
header("Location: index.php?p=2");
}
if(mysqli_num_rows($this->query) == 0)
{
$output .= "U heeft een verkeerde combinatie van gebruikersnaam en wachtwoord ingevult";
}
}
return $output;
}
}
Gewijzigd op 25/08/2013 12:49:14 door Jelle de vries
Zou je de output nodig hebben in andere methoden, dan gebruik je $this->output om er een eigenschap van de klasse van te maken. Pas dan ook wordt de scope ruimer dan slechts één methode en ga je private of protected toevoegen om de toegang te reguleren.
Dat wou ik weten.
Overigens is het aan te raden om je variabelen private te houden vooral in het begin wanneer je net met OOP bezig bent zodat je geen "dirty" manieren aanleert zoals de variabele direct aanroepen vanuit een andere klasse
Verander de while in een if. Een while heb je nodig wanneer je meerdere records verwacht. Bij een login is dat niet het geval.
En dan kan je trouwens nog de else gebruiken.
Dus iets als