static variabelen
Ik worstel een beetje met het volgende. Ik heb een klasse Ticket. In deze klasse staan een aantal velden met de bijbehorende getters & setters. Zo staat er ook een veld genaamd priority. Dit veld mag alleen de waarde hebben van 1 van de 3 static variabelen in deze klasse $PRIORITY_LOW, $PRIORITY_MEDIUM of $PRIORITY_HIGH. Alleen als ik deze variabelen in de setter gebruik krijg ik de volgende fout:
Fatal error: Undefined class constant 'priority_low' in C:\wamp\www\RoyalPink\index.php on line 20
terwijl naar mijn idee de vatiabele wel defined is.
hieronder de code voor een beter zicht
Ticket.php
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
/**
* @author Bert Sinnema
* @project RoyalPink
* @copyright 2008
* @description Ticket class
*/
class Ticket{
private $className = "Ticket";
static $PRIORITY_LOW = 1;
static $PRIORITY_MEDIUM = 2;
static $PRIORITY_HIGH = 3;
private $id;
private $title;
private $description;
private static $priority = 1;
private $date;
private $time;
private $customer;
function getId() {
return $this->id; }
function setId($id) {
$this->id = $id; }
function getTitle() {
return $this->title; }
function setTitle($title){
$this->title = $title; }
function getDescription(){
return $this->description; }
function setDescription($description){
$this->description = $description; }
static function getPriority(){
return $this->priority; }
static function setPriority($priority){
$this->priority = $priority; }
function getDate(){
return $this->date; }
function setDate($date){
$this->date = $date; }
function getTime(){
return $this->time; }
function setTime($time){
$this->time = $time; }
function getCustomer(){
return $this->customer; }
function setCustomer($customer){
$this->customer = $customer; }
function getClassName(){
return $this->className;
}
function printObject(){
print($this->className ."(" . $this->id . ")". ": " . $this->title . " | " . $this->description . " | " . $this->priority );
}
}
?>
/**
* @author Bert Sinnema
* @project RoyalPink
* @copyright 2008
* @description Ticket class
*/
class Ticket{
private $className = "Ticket";
static $PRIORITY_LOW = 1;
static $PRIORITY_MEDIUM = 2;
static $PRIORITY_HIGH = 3;
private $id;
private $title;
private $description;
private static $priority = 1;
private $date;
private $time;
private $customer;
function getId() {
return $this->id; }
function setId($id) {
$this->id = $id; }
function getTitle() {
return $this->title; }
function setTitle($title){
$this->title = $title; }
function getDescription(){
return $this->description; }
function setDescription($description){
$this->description = $description; }
static function getPriority(){
return $this->priority; }
static function setPriority($priority){
$this->priority = $priority; }
function getDate(){
return $this->date; }
function setDate($date){
$this->date = $date; }
function getTime(){
return $this->time; }
function setTime($time){
$this->time = $time; }
function getCustomer(){
return $this->customer; }
function setCustomer($customer){
$this->customer = $customer; }
function getClassName(){
return $this->className;
}
function printObject(){
print($this->className ."(" . $this->id . ")". ": " . $this->title . " | " . $this->description . " | " . $this->priority );
}
}
?>
En de test.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
/**
* @author Bert Sinnema
* @project RoyalPink
* @copyright 2008
* @description Test
*/
include("model\Ticket.php");
$ticket1 = new Ticket();
$ticket1->setId(10);
$ticket1->setTitle("Test ticket");
$ticket1->setDescription("Blaat");
$ticket1->setPriority(Ticket::PRIORITY_HIGH);
$ticket1->printObject();
?>
/**
* @author Bert Sinnema
* @project RoyalPink
* @copyright 2008
* @description Test
*/
include("model\Ticket.php");
$ticket1 = new Ticket();
$ticket1->setId(10);
$ticket1->setTitle("Test ticket");
$ticket1->setDescription("Blaat");
$ticket1->setPriority(Ticket::PRIORITY_HIGH);
$ticket1->printObject();
?>
Werkt goed, dankjewel!!
Daarbij 'hoor' je in PHP bij alle methods te definieren of ze public, private of protected zijn. En je kan types afdwingen, iets dat je waarschijnlijk wel prettig vindt aangezien je Java achtergrond:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
public function setCustomer(Customer $customer) {
$this->customer = $customer;
}
?>
public function setCustomer(Customer $customer) {
$this->customer = $customer;
}
?>
Zo gaat PHP zeuren (met fatale fouten gooien) wanneer setCustomer als eerste argument niet een instantie van de klasse Customer krijgt.
Cewl.... thnQ de termen zijn me bekend en inderdaad fijn dat je kan afdwingen.. Tis wel ff wennen omdat het een en ander net ff anders is in de syntax.. Bedankt!!
Code (php)
Meer niet dacht ik.
Daarnaast kun je constanten alleen benaderen via self::[varnaam];
en niet via $this->[varnaam];
bijv
public Ticket getTicket(){
}
??
Statics hebben overigens wel toegang tot de private scope, ze zitten immers in dezelfde klasse. Dit maakt Singleton mogelijk:
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
die static $instance is trouwens ook een truucje in PHP. Op deze manier is deze variabele 1 en dezelfde in alle aanroepen van Zon::instance, en behoudt hij zijn waarde. Deze manier is ook wel bekend: