Wel of niet declareren private,public,protected in geval...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eric T

Eric T

17/10/2014 14:15:55
Quote Anchor link
Bezig PhP OOP te studeren...
Ik heb nu deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include_once("config.php");
include_once("classes/participant.php");

unset($result);
$readParticipant = new Participant();
$result = $readParticipant->getParticipant('Pietje');

echo "De getallen van ".$result[0]." zijn: ".$result[1].",".$result[2].",".$result[3].",".$result[4].",".$result[5].",".$result[6];

echo "<br>";
?>


en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Participant{

    function
getParticipant($naam){
    
        $query_numbers_one_person    = mysql_query("SELECT naam,a,b,c,d,e,f FROM lotto_users WHERE naam='$naam'");
        $array_numbers_one_person    = mysql_fetch_row($query_numbers_one_person);
            
        return $array_numbers_one_person;
    }

}

?>


In meerdere tutorials zie ik uitleg over het declareren van een variabele private, public of protected.
Maar in dit voorbeeld zie ik de noodzaak daarvan niet direct...
Is het erg als je deze declaratie weg laat? Of is het echt werkelijk altijd nodig?
Ofwel, kan iemand uitleggen wat de reden is van het wel doen, of de reden voor het niet perse hoeven doen?
Dit staat helaas net niet uitgelegd in alle tutorials die ik tot nu toe gelezen heb...

Ik ga er van uit dat dit:
public $naam;
dan nog vóór de functie moet komen te staan.

Alvast dank voor de opheldering...

vr gr Eric
 
PHP hulp

PHP hulp

19/01/2022 14:07:51
 

17/10/2014 14:33:46
Quote Anchor link
Een declaratie van een variabele is sinds PHP5 van belang (zo uit me hoofd)

Alle variabelen die je gebruikt door je class moet je opgeven.

De manier hoe jij nu de functie gebruikt zal je geen public hoeven te declareren. Omdat het een parameter is en geen property van je class..

Probeer dit maar eens:

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
18
19
20
21
<?php
class Participant
{
    public $name;
    
    function
getParticipant()
    {

        
        $query_numbers_one_person    = mysql_query("SELECT naam,a,b,c,d,e,f FROM lotto_users WHERE naam='$this->name'");
        $array_numbers_one_person    = mysql_fetch_row($query_numbers_one_person);
            
        return $array_numbers_one_person;
    }

}



$readParticipant = new Participant();
$readParticipant->name = 'Pietje';
$result = $readParticipant->getParticipant();
?>
Gewijzigd op 17/10/2014 14:37:03 door
 
Eric T

Eric T

17/10/2014 14:42:24
Quote Anchor link
ah, ok... dankje Rickert! Dat verheldert al e.e.a. :-)
Dus als ik het goed begrijp is het dus voor specifiek dit voorbeeld niet perse nodig...
Enig idee of dat in professionele kring ook soms achterwege wordt gelaten dan dus?
Of is in de professionele wereld dit een stricte voorwaarde dat het altijd gedeclareerd wordt?
(bestaat daar een afspraak over?)
 

17/10/2014 14:46:52
Quote Anchor link
Het ligt aan de class maar je kan er voor 90% vanuit gaan dat je altijd op deze manier werkt.
Want je hebt nu maar gebruikersnaam in de method.

Wat als je meerdere acties wilt doen?

Bijvoorbeeld:
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
18
19
20
21
22
23
24
25
26
27
28
<?php
class Participant
{
    public $name;
    
    function
getParticipant()
    {

        
        $query_numbers_one_person    = mysql_query("SELECT naam,a,b,c,d,e,f FROM lotto_users WHERE naam='$this->name'");
        $array_numbers_one_person    = mysql_fetch_row($query_numbers_one_person);
            
        return $array_numbers_one_person;
    }


public function updateImage($imageName)
{

mysql_query("UPDATE image_name SET $imageName WHERE naam='$this->name'");
}

}



$readParticipant = new Participant();
$readParticipant->name = 'Pietje';
$result = $readParticipant->getParticipant();

$readParticipant->updateImage($result['id']);
?>
Gewijzigd op 17/10/2014 14:48:05 door
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/10/2014 15:04:38
Quote Anchor link
Persoonlijk vind ik het wel netter om $name private te declareren.

Voorbeeldje:
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class Participant
{
    private $name;

    function
__construct($naam)
    {

        $this->setNaam($naam);
    }


    public function getParticipant()
    {

        $query_numbers_one_person    = mysql_query("SELECT naam,a,b,c,d,e,f FROM lotto_users WHERE naam='" . $this->naam . "'");
        $array_numbers_one_person    = mysql_fetch_row($query_numbers_one_person);

        return $array_numbers_one_person;
    }


    public function getNaam()
    {

        return $naam;
      }


    public function setNaam($naam)
    {

        $this->naam = ucfirst($naam); // Kijk nu wordt de naam altijd met een hoofdletter.
      }

}


$p = new Participant('fRaNk');
?>
 
Eric T

Eric T

17/10/2014 15:16:07
Quote Anchor link
Haha... de class wordt zo lekker uitgebreid :-)
Maar top jongens! Voor mij is het helder...
Hier kan ik tenminste wat mee voor mijn begripsvorming!

Dankjulliewel!

vr gr Eric
 

17/10/2014 15:29:35
Quote Anchor link
Dat is inderdaad een aanname @frank. Het ging Eric om het principe of er wel of geen public bij moest.
Het is helder.

Frank zijn class gebruikt de functies om de naam te vullen, dit maakt het veiliger. In ons kleine voorbeeld is dit overbodig naar mijn weten.
Ook gebruikt Frank een __construct + een setNaam. Bij het creeren van het object geef je nu meteen mee wat de naam is.
Later zou je de naam nog kunnen wijzigen naar een andere naam.

Principe is duidelijk nu denk ik.
 



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.