Ik zat dus wat rond te kijken naar OOP na die geweldige tutorial van PHPErik over OOP. Maar wat me opvalt is dat veel tutorials meteen een hele hap code verklaren, en niet gewoon simpel beginnen. Dat kan ook aan mij en mijn zoekkunsten liggen, maar toch :o
Uit eindelijk heb ik dit stuk code in elkaar gezet, en ik weet 100% zeker dat dit toch wel zou moeten werken, maar het geeft steeds dezelfde error, namelijk:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /monkey/OOP/pagina1.php on line 5
De code:
<?php
class Monkey
{
public $name = 'aapjuh';
public $gender = 'male';
function myInfo()
{
echo $this->name;
echo $this->gender;
}
}
myInfo();
?>
Hmm, heb idd php4, eens even overleggen of dat niet 5 kan worden. Bedankt. Maar scheeld php4 dan veel van php5, met het gebruik van codes? php 4 kan geen public, private etc toch? Meer weet ik niet echt van de verschillen, ik ga nu werken dus bekijk dat morgen wel.
Line 15 bij mij. Maar dat klopt. Jij roept de functie myInfo() aan. Maar die bestaat niet.
Wat je waarschijnlijk bedoelt is de method myInfo() van de class Monkey. Het verschil tussen een functie en een method is dat je een method altijd via een instantie aanroept. En een instantie is een object dat beschreven is door een class. :+
<?php
$mijn_aapje = new Monkey();
$mijn_aapje->myInfo();
$ander_aapje = new Monkey();
$ander_aapje->gender = 'undecided';
$ander_aapje->myInfo();
// maar
$mijn_aapje->myInfo();
?>
Wanneer ik mijn_aapje aanmaak, stop ik een object dat beschreven is door de klasse Monkey in mijn leuke $mijn_aapje variabele. $mijn_aapje->myInfo() print dan effectief $mijn_aapje->name en $mijn_aapje->gender.
Nu maak ik nog een ander aapje aan, en daarvan verander in het gender. $ander_aapje is dus een ander aapje dan $mijn_aapje, het zijn beiden losse instanties van dezelfde klasse. Dus beiden hebben ze de eigenschappen $name en $gender, en de method myInfo, maar de inhoud van beiden is onafhankelijk. Dus $ander_aapje->myInfo() print een ander gender.
En om te laten zien dat $mijn_aapje niet aangepast is, print ik die nog een keer, en zie je dat die nog steeds hetzelfde is.
edit PHP 5 is een vereiste wanneer je fatsoenlijk met objecten wilt werken. Of lten we het zo zeggen, PHP 5 scheelt je een hoop kopzorgen wanneer je bezig gaat met OOP in PHP.
Dan kan je ook nog gebruik maken van setters en getters. Maar leuk dat je je oop kunsten hebt laten zien... Levert ook een groote bijdrage aan dit topic hé...
En als je nu later pas het gender wilt bepalen ;) Bijv mama monkey is zwanger en je maakt vast een baby monkey aan... maar je weet het geslacht nog niet en daardoor weet je ook nog geen naam te bepalen ^^
In je constructor zou ik dus
public function __construct($name ='', $gender ='') {
zetting ipv deze te verplichten ;)
Dan kan je ook nog gebruik maken van setters en getters. Maar leuk dat je je oop kunsten hebt laten zien... Levert ook een groote bijdrage aan dit topic hé...
Ik gaf gewoon een voorbeeld, ik kan er niets aan doen dat jij met het verkeerde been uit bed bent gestapt.
Sickness schreef op 02.11.2008 17:29
En als je nu later pas het gender wilt bepalen ;) Bijv mama monkey is zwanger en je maakt vast een baby monkey aan... maar je weet het geslacht nog niet en daardoor weet je ook nog geen naam te bepalen ^^
Dan krijg je new Fetus(), dan is er nog geen Monkey ;)
Het is een onnodig om getter functies binnen de class aan te roepen zoals Henk doet.
Niet helemaal mee eens. Het zou zomaar kunnen dat getName() een databasehandeling uitvoert (evt. in de toekomst) of de naam formatteert (evt. in de toekomst). Het kan nooit kwaad een getter te gebruiken.
Ik zou wel iedereen willen aanraden een standaard qua naamgeving te gebruiken zoals die van Zend of PEAR.