review first class
hieronder de complete class
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
47
48
49
50
51
52
53
54
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
47
48
49
50
51
52
53
54
<?php
// functies = methods
// $Variabelen = properties
class person {
var $name;
public $height;
protected $social_insurance;
private $pinn_number;
function __construct($persons_name){
$this->name = $persons_name;
}
protected function set_name($new_name){
if($new_name != "Reshad Farid")
$this->name = strtoupper($new_name);
}
function get_name(){
return $this->name;
}
}
// met extends koppel je de ene class aan een andere class inc. alle properties.
class employee extends person {
protected function set_name($new_name){
if ($new_name == "Reshad Farid"){
$this->name = $new_name;
}
else if ($new_name == "Ferdoes"){
person::set_name($new_name);
}
}
function __construct($employee_name){
$this->set_name($employee_name);
}
}
?>
// functies = methods
// $Variabelen = properties
class person {
var $name;
public $height;
protected $social_insurance;
private $pinn_number;
function __construct($persons_name){
$this->name = $persons_name;
}
protected function set_name($new_name){
if($new_name != "Reshad Farid")
$this->name = strtoupper($new_name);
}
function get_name(){
return $this->name;
}
}
// met extends koppel je de ene class aan een andere class inc. alle properties.
class employee extends person {
protected function set_name($new_name){
if ($new_name == "Reshad Farid"){
$this->name = $new_name;
}
else if ($new_name == "Ferdoes"){
person::set_name($new_name);
}
}
function __construct($employee_name){
$this->set_name($employee_name);
}
}
?>
Gewijzigd op 26/04/2012 12:51:38 door Reshad F
Ook mis her en der wat visibility en moet je nooit 'var' als visibility gebruiken.
Ook gebruik je op regel 50 $this->set_name(), maar op regel 44 person::set_name waarbij die op regel 50 de juiste is.
Tevens die extend, het is niet koppelen. Het is uitbouwen. Stel je hebt een User klasse die kan gewoon alles wat een user doet. Maar nu wil je ook een admin klasse doen, een admin is een uitbouwing van de User klasse en dus extend je die.
Je mag me ook nog even vertellen wat deze klasse doet. Wat het totale nut is mij niet duidelijk. Je kan een person aanmaken en je kan een employee aanmaken en je kan hun naam veranderen. Maar wat al die if'jes met die namen erin doen is mij een compleet raadsel? En als je nou bepaalde namen wilt blokkeren maakt het dan wat dynamisch iets als:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class User
{
protected $invalidNames = array();
protected $name;
public function invalidNames(array $names)
{
$this->invalidNames = $names;
}
public function setName($name)
{
if (in_array($name, $this->invalidNames)) {
throw new RunTimeException(sprintf("The name '%s' is not valid", $name);
}
$this->name = $name;
}
}
?>
class User
{
protected $invalidNames = array();
protected $name;
public function invalidNames(array $names)
{
$this->invalidNames = $names;
}
public function setName($name)
{
if (in_array($name, $this->invalidNames)) {
throw new RunTimeException(sprintf("The name '%s' is not valid", $name);
}
$this->name = $name;
}
}
?>
(dit is nog niet 100% goed OOP, omdat je hier eigenlijk een andere klasse voor nodig hebt om een user aan te maken en te veranderen, maar goed we houden het even bij de basis
Je hebt ook teveel properties, aangezien je alleen name gebruikt. En wat is nou het verschil tussen een Person en een Employee in jou voorbeeld? Waarom gebruik je eigenlijk in de Employee klasse de ene keer $this->name en de andere keer de set_name method?
Als je een klasse extend hoef je niet alle methods te overschrijven. De constructor bijv. is in beide klasse hetzelfde, dan kun je die bij de Employee gewoon weglaten (dat is nou het voordeel van extenden).
ehm ik was een tutorial aan het volgend namelijk deze: http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-1.php
en op regel 44 gebruik ik de person::set_name omdat er in de tut stond dat als je in een andere klass naar een method wild zoeken je dit moet gebruiken. verder die employee class was als voorbeeldje in die tutorial hoe extended class werkt maar het gaat inderdaad alleen om de person class. ik heb de employee er toch bijgezet om te kijken of het wel goed is.
Kijk, iemand heeft mijn 3 standaard linkjes onthouden! ;)
@wouter heb je ook een goede beginners tutorial voor me waar je zelf classes schrijft? ( dus niet php.net die heb ik al doorgelezen :l ) ik heb die van zend inderdaad een keer doorgelezen tijdje terug. ga het eventjes weer doen! bedankt bas.
OOP beginnershandleiding uit, stukken beter. En daarnaast heel veel oefenen en terug kijken in het OOP forumdeel van deze site, kijk wat er gegeven wordt probeer de gedachten erachter te begrijpen en kijk naar de uitleg.
Tevens moet je altijd even kijken wanneer een tutorial over een scripttaal is geschreven, als het ouder is dan 2 jaar zou ik er bijna nooit zomaar aan beginnen (behalve als je van een ervarerer developer heb gehoord dat die goed is). Die tut van jou komt uit September 2007 en lijkt mij dus iets te oud.
Die linkjes van Bas zijn slechts coding standards, dat is dus hoe je het beste kunt scripten qua hoe schrijf je het.
Ik raad je de Tevens moet je altijd even kijken wanneer een tutorial over een scripttaal is geschreven, als het ouder is dan 2 jaar zou ik er bijna nooit zomaar aan beginnen (behalve als je van een ervarerer developer heb gehoord dat die goed is). Die tut van jou komt uit September 2007 en lijkt mij dus iets te oud.
Die linkjes van Bas zijn slechts coding standards, dat is dus hoe je het beste kunt scripten qua hoe schrijf je het.
ik ga aan de gang met je tips, bedankt wouter!