OOP Beginner
Beste,
Ik ben nieuw met OO in php.
Ik heb van school een ebook gekregen en wat opdrachten en that's it. Verder moet je het maar uitzoeken.
De volgende opdrachten moet ik uitvoeren:
a. Zet de basis van een eenvoudige User class op.
b. Definieer een property (gebruikersnaam (username)) voor deze class. (public)
c. Voeg een get-method en een set-method toe.
d. Voeg een tweetal nieuwe objecten toe.
e. Laat de twee nieuwe objecten op het scherm afbeelden. (Harold en Albert)
En mijn code is als volgt:
Ik krijg echter de foutmelding:
Parse error: syntax error, unexpected '$Username' (T_VARIABLE), expecting function (T_FUNCTION) in D:\xampp\htdocs\php\userclass.php on line 5
Ik doe het precies zoals in het boek staat maar het werkt blijkbaar niet. Wat doe ik fout?
Ik ben nieuw met OO in php.
Ik heb van school een ebook gekregen en wat opdrachten en that's it. Verder moet je het maar uitzoeken.
De volgende opdrachten moet ik uitvoeren:
a. Zet de basis van een eenvoudige User class op.
b. Definieer een property (gebruikersnaam (username)) voor deze class. (public)
c. Voeg een get-method en een set-method toe.
d. Voeg een tweetal nieuwe objecten toe.
e. Laat de twee nieuwe objecten op het scherm afbeelden. (Harold en Albert)
En mijn code is als volgt:
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
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
Ik krijg echter de foutmelding:
Parse error: syntax error, unexpected '$Username' (T_VARIABLE), expecting function (T_FUNCTION) in D:\xampp\htdocs\php\userclass.php on line 5
Ik doe het precies zoals in het boek staat maar het werkt blijkbaar niet. Wat doe ik fout?
Je moet ook een property aangeven voor $Username.
Zie ook: http://www.php.net/manual/en/language.oop5.properties.php
Dus public $Username;
Zie ook: http://www.php.net/manual/en/language.oop5.properties.php
Dus public $Username;
Gewijzigd op 12/05/2014 11:18:16 door - Ariën -
Je hebt dan de eigenschap private $Username, maar gebruikt daarnaast nog $this->name met een kleine letter en $this->Name met een hoofdletter. Dat zijn drie verschillende eigenschappen, die één eigenschap moeten worden.
Verder gebruik je de methode getName() nog nergens.
Verder gebruik je de methode getName() nog nergens.
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
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
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
class User
{
private $Username;
function setName($username)
{
$this->Username = $username;
}
function getName()
{
return $this->Username;
}
}
$user_one = new User();
$user_two = new User();
$user_one->setName('Harold');
$user_two->setName('Albert');
echo '<p>First user: ' . $user_one->getName() . '</p>';
echo '<p>Second user: ' . $user_two->getName() . '</p>';
?>
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
class User
{
private $Username;
function setName($username)
{
$this->Username = $username;
}
function getName()
{
return $this->Username;
}
}
$user_one = new User();
$user_two = new User();
$user_one->setName('Harold');
$user_two->setName('Albert');
echo '<p>First user: ' . $user_one->getName() . '</p>';
echo '<p>Second user: ' . $user_two->getName() . '</p>';
?>
Krijg nu dit:
Parse error: syntax error, unexpected '$Albert' (T_VARIABLE) in D:\xampp\htdocs\php\userclass.php on line 19
Parse error: syntax error, unexpected '$Albert' (T_VARIABLE) in D:\xampp\htdocs\php\userclass.php on line 19
Laat het script nog eens zien?
Deze lijn klopt niet helemaal. Je moet of de 2 variabelen aan elkaar koppelen (met de "." operator), of je moet wat anders leuks doen. Maar nu heb je 2 variabelen die elkaar opvolgen zonder iets ertussen, dat kan in PHP niet.
Tevens echo je nu objecten, je kan alleen strings echoën, dus dat werkt ook niet. Ik denk dat je getName() wilt echoën.
Heb nu dit:
Parse error: syntax error, unexpected '$Albert' (T_VARIABLE) in D:\xampp\htdocs\php\userclass.php on line 19
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
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
<?php
class User
{
public $Username;
function setName($Username)
{
$this->name = $Username;
}
function getName()
{
return $this->Name;
}
function _construct(){}
}
$Harold=new User()
$Albert=new User()
$Harold->setName('Harold');
$Albert->setName('Albert');
echo $Harold->getName();
echo $Albert->getName();
?>
class User
{
public $Username;
function setName($Username)
{
$this->name = $Username;
}
function getName()
{
return $this->Name;
}
function _construct(){}
}
$Harold=new User()
$Albert=new User()
$Harold->setName('Harold');
$Albert->setName('Albert');
echo $Harold->getName();
echo $Albert->getName();
?>
Parse error: syntax error, unexpected '$Albert' (T_VARIABLE) in D:\xampp\htdocs\php\userclass.php on line 19
18 en 19 mist een punt-komma aan het eind.
Gewijzigd op 12/05/2014 13:10:54 door - Ariën -
- Aar - op 12/05/2014 11:18:00:
Je moet ook een property aangeven voor $Username.
Zie ook: http://www.php.net/manual/en/language.oop5.properties.php
Dus public $Username;
Zie ook: http://www.php.net/manual/en/language.oop5.properties.php
Dus public $Username;
Als ik de leraar zou zijn zou je bonuspunten verdienen met het declareren van een private $username. Helemaal als je er dan het volgende commentaar bijzet:
"class variabele als private gedeclareerd, maar het property is public door de public getter en public setter."
Dan doe je het en goed en je geeft aan te begrijpen dat er een verschil is tussen een property en een variabele in een class. Public property is prima, maar een public class variabele is een slecht begin.
- Aar - op 12/05/2014 12:25:11:
18 en 19 mist een dubbele punt aan het eind.
een ; bedoel je neem ik aan :P?
Kreeg eerst weer een foutmelding, maar heb het nu werkend!
function setUser en de rest veranderd in setUSername en getUsername
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
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
<?php
class User
{
public $Username;
function setUsername($Username)
{
$this->Username = $Username;
}
function getUsername()
{
return $this->Username;
}
function _construct(){}
}
$Harold=new User();
$Albert=new User();
$Harold->setUsername('Harold');
$Albert->setUsername('Albert');
echo $Harold->getUsername();
echo $Albert->getUsername();
?>
class User
{
public $Username;
function setUsername($Username)
{
$this->Username = $Username;
}
function getUsername()
{
return $this->Username;
}
function _construct(){}
}
$Harold=new User();
$Albert=new User();
$Harold->setUsername('Harold');
$Albert->setUsername('Albert');
echo $Harold->getUsername();
echo $Albert->getUsername();
?>
function setUser en de rest veranderd in setUSername en getUsername
Jacco Engel op 12/05/2014 12:54:00:
een ; bedoel je neem ik aan :P?
- Aar - op 12/05/2014 12:25:11:
18 en 19 mist een dubbele punt aan het eind.
een ; bedoel je neem ik aan :P?
Jep... :P
volgende probleem:
Moet nu een subclass aanmaken(premium_user) deze moet de properties username en ID krijgen. Vervolgens een object aanmaken en tonen.
Heb het volgende:
FOUT:
Fatal error: Non-abstract method Premium_user::setUsername() must contain body in D:\xampp\htdocs\php\userclass.php on line 37
Moet nu een subclass aanmaken(premium_user) deze moet de properties username en ID krijgen. Vervolgens een object aanmaken en tonen.
Heb het volgende:
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
55
56
57
58
59
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
55
56
57
58
59
<?php
class User
{
public $Username;
function setUsername($Username)
{
$this->Username = $Username;
}
function getUsername()
{
return $this->Username;
}
function _construct(){}
}
$Harold=new User();
$Albert=new User();
$Harold->setUsername('Harold');
$Albert->setUsername('Albert');
echo $Harold->getUsername();
echo $Albert->getUsername();
class Premium_user extends User
{
public $Username;
public $ID;
function setUsername($Username);
{
$this->Username = $Username;
}
function getUsername()
{
return $this->Username;
}
function setID($ID);
{
$this->$ID;
}
function getID()
{
return $this->ID;
}
}
$Rick=new Premium_user();
echo $Rick->getUsername();
?>
class User
{
public $Username;
function setUsername($Username)
{
$this->Username = $Username;
}
function getUsername()
{
return $this->Username;
}
function _construct(){}
}
$Harold=new User();
$Albert=new User();
$Harold->setUsername('Harold');
$Albert->setUsername('Albert');
echo $Harold->getUsername();
echo $Albert->getUsername();
class Premium_user extends User
{
public $Username;
public $ID;
function setUsername($Username);
{
$this->Username = $Username;
}
function getUsername()
{
return $this->Username;
}
function setID($ID);
{
$this->$ID;
}
function getID()
{
return $this->ID;
}
}
$Rick=new Premium_user();
echo $Rick->getUsername();
?>
FOUT:
Fatal error: Non-abstract method Premium_user::setUsername() must contain body in D:\xampp\htdocs\php\userclass.php on line 37
function setUsername($Username);
Kijk een goed naar het eind van die regel.
Verder is er geen reden om getters en setters te hebben voor public properties. Maak ze dus private/protected.
$Username, methode setUsername() en methode getUsername() erf je al van User, deze hoef je dus niet opnieuw aan te maken.
Kijk een goed naar het eind van die regel.
Verder is er geen reden om getters en setters te hebben voor public properties. Maak ze dus private/protected.
$Username, methode setUsername() en methode getUsername() erf je al van User, deze hoef je dus niet opnieuw aan te maken.
Kijk eens naar http://www.php.net/manual/en/keyword.extends.php als je het goed wil doen :)
De ; moest er niet achter.
Heb de de functions set en get username weg gehaald, maar moet ik dan wel van Premium_user een property maken? met een get en set?
Heb de de functions set en get username weg gehaald, maar moet ik dan wel van Premium_user een property maken? met een get en set?
Premium_user is een class, geen property.
oh inderdaad, domme opmerking sorry.
Toevoeging op 12/05/2014 19:15:57:
Heb deze ook werkend gekregen naar wat gepuzzel.
Ik was dit vergeten; $Rick->setUsername('Rick');
Kon de method van setUsername en getUsername inderdaad gewoon weer gebruiken!
Super dat iedereen zo behulpzaam is. Ben namelijk echt een leek
Toevoeging op 12/05/2014 19:15:57:
Heb deze ook werkend gekregen naar wat gepuzzel.
Ik was dit vergeten; $Rick->setUsername('Rick');
Kon de method van setUsername en getUsername inderdaad gewoon weer gebruiken!
Super dat iedereen zo behulpzaam is. Ben namelijk echt een leek




