OOP Beginner
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?
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 -
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>';
?>
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.
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
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?
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
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
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.
http://www.php.net/manual/en/keyword.extends.php als je het goed wil doen :)
Kijk eens naar 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.
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