OOP Set Get etc

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Bas D L

Bas D L

01/11/2012 12:38:16
Quote Anchor link
Hallo,
Ik heb onderstaande code, wat ik ik niet helemaal snap is: Dit heb ik erachter gezet //

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
class person {  

    public $name; //wanneer en waarom heb ik deze property nodig

    function __construct($name) {  
    $this->name = $name;    
    }      

    function set_name($new_name) {  
    $this->name = $new_name;
    }      

    function get_name() {
    return $this->name;
    }      

}

$objPerson = new person("Bas"); //Als je hier een waarde mee geeft wordt dan automatisch de constructor aangeroepen?
$objPerson->set_name('Lisa');
echo $objPerson->get_name() ;  
 
PHP hulp

PHP hulp

28/03/2024 19:28:26
 
Flip --

Flip --

01/11/2012 12:59:51
Quote Anchor link
getters en setters worden voornamelijk met private properties gebruikt

je properties heb je nodig om iets te kunnen opslaan in een class. Anders krijg je:
Notice: Undefined property: person::$name
Dat is geen error op zich, maar het slaat niks op.

je constructor wordt aangeroepen automatisch als je een nieuw object aanmaakt van een class. Dus ja je hebt gelijk
Gewijzigd op 01/11/2012 13:06:13 door Flip --
 
Bas D L

Bas D L

01/11/2012 13:09:19
Quote Anchor link
@Flip, als ik onderstaand doe dan heeft de property geen functie?
Wanneer wel ;-) probeer het te begrijpen :-$

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
class person {  

    public $name;

    function set_name($new_name) {  
    $this->name = $new_name;
    }      

    function get_name() {
    return $this->name;
    }      

}

$objPerson = new person();
$objPerson->set_name('Lisa');
echo $objPerson->get_name() ;  
Gewijzigd op 01/11/2012 13:11:29 door Bas D L
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 13:09:35
Quote Anchor link
Ja een constructor wordt altijd automatisch aangeroepen als je een nieuwe instantie maakt van een class, ook als je geen parameters mee geeft.

bij regel 19 wordt een nieuwe instantie gemaakt en dus direct de constructor aangeroepen. vandaar ook het woord new.

Toevoeging op 01/11/2012 13:18:07:

een property is een variabele in je class in jouw geval $name.
een method is een functie in een class zoals get_name
 
Bas D L

Bas D L

01/11/2012 13:21:20
Quote Anchor link
ik heb nu deze, beide werken ze zonder property, wanneer heb je dan we de property nodig?

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
class person1 {  

    function set_name($name) {  
    $this->name = $name;
    }      

    function get_name() {
    return $this->name;
    }      

}

class person2 {  

    function __construct($name) {  
    $this->name = $name;    
    }      

    function get_name() {
    return $this->name;
    }      

}

$objPerson1 = new person1();
$objPerson1->set_name('Lisa');
echo $objPerson1->get_name() ;  

$objPerson2 = new person2("Bas");
echo $objPerson2->get_name() ;    
Gewijzigd op 01/11/2012 13:22:59 door Bas D L
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 13:37:49
Quote Anchor link
PHP zal nu jouw property automatisch aanmaken. In veel andere programmeer talen gaat je dit niet lukken. Het advies is dan ook om je property netjes te declareren boven in de class, het liefst met één van de scopes public, protected of private.

Toevoeging op 01/11/2012 13:40:16:

dus zo

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
<?php

class person1 {  
    protected $name;

    public function set_name($name) {  
        $this->name = $name;
    }
      

    public function get_name() {
        return $this->name;
    }      

}


?>
 
Bas D L

Bas D L

01/11/2012 13:41:51
Quote Anchor link
@Frank,
Ahhhhhh, dat wist ik niet...
Bij wat voor een vb code zou je hem dan wel "moeten" declareren?
Gewijzigd op 01/11/2012 13:44:38 door Bas D L
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 13:44:38
Quote Anchor link
Oh en wen jezelf direct aan om classnamen met een hoofdletter te schrijven. Dus Person in plaats van person.

Toevoeging op 01/11/2012 13:46:15:

Als je bijvoorbeeld in C++ of C# gaat schrijven dan krijg je bij het compileren van je code onheroepelijk een foutmelding.

Toevoeging op 01/11/2012 13:47:06:

Bas D L op 01/11/2012 13:41:51:
@Frank,
Ahhhhhh, dat wist ik niet...
Bij wat voor een vb code zou je hem dan wel "moeten" declareren?


Je vraag is niet helemaal duidelijk Bas.
 
- SanThe -

- SanThe -

01/11/2012 13:49:55
Quote Anchor link
Frank Nietbelangrijk op 01/11/2012 13:37:49:
het liefst met één van de scopes public, protected of private.


Hoi Frank,

Nu je toch duidelijk aan het uitleggen bent. Kun je mischien heel in het kort de verschillen uitleggen tussen public, protected en private?

SanThe.
Gewijzigd op 01/11/2012 13:50:52 door - SanThe -
 
Bas D L

Bas D L

01/11/2012 13:54:46
Quote Anchor link
@Frank,
Ok, sorry, opnieuw. Onderstaand is duidelijk.
In dit voorbeeld hoef je in principe $name niet te gebruiken, in C wel. Ook duidelijk.

Wanneer moet je $name wel declareren, is daar vb code van?
Ik probeer variable gebruik in een class te begrijpen :-$ ;-)

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
class Person1 {  
    protected $name;

    public function set_name($name) {  
        $this->name = $name;
    }      

    public function get_name() {
        return $this->name;
    }      

}

$objPerson1 = new Person1();
$objPerson1->set_name('Lisa');
echo $objPerson1->get_name() ;  
Gewijzigd op 01/11/2012 13:55:23 door Bas D L
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 14:03:41
Quote Anchor link
Zodra je $this->property gaat doen moet je die property ook gewoon direct declareren, altijd!
Gewijzigd op 01/11/2012 14:03:57 door Frank Nietbelangrijk
 
Bas D L

Bas D L

01/11/2012 14:10:18
Quote Anchor link
dus als ik echo echo $objPerson1->name; zou doen dan benader ik de property binnen de class, alleen heeft de var toch geen waarde?

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
class Person1 {  
    public $name;

    public function set_name($name) {  
        $this->name = $name;
    }      

    public function get_name() {
        return $this->name;
    }      

}

$objPerson1 = new Person1();
echo $objPerson1->name;
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 14:10:22
Quote Anchor link
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php

class Person {
    public $name;
    
    public function setName($name) {
        $this->name = $name;
    }
};


$persoon = new Person();
$persoon->name = 'jan'; // geen foutmelding $name is publiek dus ik mag er van buiten de class gebruik van maken.


// ------------------------------------------------------------------------------------------------------------------------------



class Person {
    protected $name;
    
    function
setName($name) {
        $this->name = $name;
    }
};


$persoon = new Person();
$persoon->name = 'jan'; // Dit geeft een foutmelding. $name is niet publiek dus ik mag er van buiten de class geen gebruik van maken.
$persoon->setName('jan'); // Dit mag wel want de method setName is wel public


// ------------------------------------------------------------------------------------------------------------------------------



class Person {
    private $name;
    
    function
setName($name) {
        $this->name = $name;
    }
};


$persoon = new Person();
$persoon->name = 'jan'; // Dit geeft een foutmelding. $name is niet publiek dus ik mag er van buiten de class geen gebruik van maken.
$persoon->setName('jan'); // Dit mag wel want de method setName is wel public

?>
Gewijzigd op 01/11/2012 14:11:13 door Frank Nietbelangrijk
 
Mebus  Hackintosh

Mebus Hackintosh

01/11/2012 14:10:55
Quote Anchor link
@SanThe,

Heb zelf het boek 'phpmaster' van phpmaster.com en daar staat een afbeelding in die uitlegt wanneer je public, protected of private kan gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
Accessed externally? -> yes -> public
|
no
Deny to children? -> yes -> privatie
|
no
Protected
Gewijzigd op 01/11/2012 14:12:04 door Mebus Hackintosh
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 14:11:57
Quote Anchor link
Hoe ver ben je met dat boek?
 
Mebus  Hackintosh

Mebus Hackintosh

01/11/2012 14:13:19
Quote Anchor link
Frank Nietbelangrijk op 01/11/2012 14:11:57:
Hoe ver ben je met dat boek?


Nog niet al te ver. Ik wacht nog op de printed versie ervan (nog niet verzonden) maar heb wel het e-book en het leest goed weg.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 14:15:03
Quote Anchor link
okee. Om het verschil tussen private en protected uit te leggen moeten we een stapje dieper.

Ik weet niet of je dat al wilt
 
Bas D L

Bas D L

01/11/2012 14:15:45
Quote Anchor link
@Frank,
Ik denk dat ik het snap, je kan zowel een property als method buiten de class manipuleren mits ze public zijn, toch?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/11/2012 14:16:47
Quote Anchor link
Klopt Bas.
 
Mebus  Hackintosh

Mebus Hackintosh

01/11/2012 14:17:10
Quote Anchor link
Frank Nietbelangrijk op 01/11/2012 14:15:03:
okee. Om het verschil tussen private en protected uit te leggen moeten we een stapje dieper.

Ik weet niet of je dat al wilt


Dat mag :) Daar gaat het boek niet veel verder op in namelijk (denk ik).
 
Bas D L

Bas D L

01/11/2012 14:18:32
Quote Anchor link
Frank Nietbelangrijk op 01/11/2012 14:16:47:
Klopt Bas.


Dankjewel! Dan begrijp ik het, nu nog toepassen hahaha.
Zijn daar nog goede vb van of tuts?
 

Pagina: 1 2 volgende »



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.