OOP Set Get etc
Hallo,
Ik heb onderstaande code, wat ik ik niet helemaal snap is: Dit heb ik erachter gezet //
Ik heb onderstaande code, wat ik ik niet helemaal snap is: Dit heb ik erachter gezet //
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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() ;
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() ;
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
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 --
@Flip, als ik onderstaand doe dan heeft de property geen functie?
Wanneer wel ;-) probeer het te begrijpen :-$
Wanneer wel ;-) probeer het te begrijpen :-$
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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() ;
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
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
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
ik heb nu deze, beide werken ze zonder property, wanneer heb je dan we de property nodig?
Code (php)
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
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() ;
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
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
Toevoeging op 01/11/2012 13:40:16:
dus zo
@Frank,
Ahhhhhh, dat wist ik niet...
Bij wat voor een vb code zou je hem dan wel "moeten" declareren?
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
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:
Je vraag is niet helemaal duidelijk Bas.
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?
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.
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 -
@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 :-$ ;-)
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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() ;
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
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
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)
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
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
?>
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
@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.
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)
1
2
3
4
5
6
7
2
3
4
5
6
7
Accessed externally? -> yes -> public
|
no
Deny to children? -> yes -> privatie
|
no
Protected
|
no
Deny to children? -> yes -> privatie
|
no
Protected
Gewijzigd op 01/11/2012 14:12:04 door Mebus Hackintosh
Hoe ver ben je met dat boek?
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.
okee. Om het verschil tussen private en protected uit te leggen moeten we een stapje dieper.
Ik weet niet of je dat al wilt
Ik weet niet of je dat al wilt
@Frank,
Ik denk dat ik het snap, je kan zowel een property als method buiten de class manipuleren mits ze public zijn, toch?
Ik denk dat ik het snap, je kan zowel een property als method buiten de class manipuleren mits ze public zijn, toch?
Klopt Bas.
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
Ik weet niet of je dat al wilt
Dat mag :) Daar gaat het boek niet veel verder op in namelijk (denk ik).
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?




