Info over de Scope

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jelle de vries

Jelle de vries

25/08/2013 11:52:00
Quote Anchor link
Beste mensen,

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
 
PHP hulp

PHP hulp

06/01/2025 06:41:07
 
Bart V B

Bart V B

25/08/2013 12:02:50
Quote Anchor link
Misschien schrijf je het moeilijker op dan dat ik denk wat je bedoeld.
Daarom even een voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class myClass
{
   public $test = "The Test Worked!";

   // zo jou jij het op dit moment doen toch?
   function example()
   {

      echo $test;
   }

   // een $var kan je in een class aanroepen met $this dus:
   function example2()
   {

     echo $this->test . ' again';
   }
}

?>
 
Jelle de vries

Jelle de vries

25/08/2013 12:44:41
Quote Anchor link
Alle eerst bedankt voor de snelle reactie, maar het is niet helemaal wat ik bedoel.
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
 
Ward van der Put
Moderator

Ward van der Put

25/08/2013 13:57:25
Quote Anchor link
Je gebruikt $output hier slechts als hulpvariabele in één methode; buiten deze methode bestaat de output niet.

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.
 
Jelle de vries

Jelle de vries

25/08/2013 14:50:36
Quote Anchor link
Hartstikke bedankt,
Dat wou ik weten.
 
Reshad F

Reshad F

25/08/2013 18:36:31
Quote Anchor link
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
 
Kris Peeters

Kris Peeters

26/08/2013 10:35:39
Quote Anchor link
Iets anders; niet echt een probleem dat met je vraag te maken heeft

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$this
->query = mysqli_query(...)
if($row = mysqli_fetch_array($this->query)) {
  $_SESSION['id'] = $row['id'];
  ...
}

else {
  $output .= "U heeft een verkeerde combinatie van gebruikersnaam en wachtwoord ingevuld";  // Met d van achter
}
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.