Verbieden van definieren nieuwe variabele in klasse
class A { }
$A = new A();
$A->test = 1; <---- dat verbieden
Hiermee kan ik bugs voorkomen door bijvoorbeeld verkeerde spelling of het veranderen van namen binnen de klasse, waarbij nu een variabele met de verkeerde naam wordt aangemaakt. In andere talen bestaat deze functionaliteit van nature omdat alle variabelen eerst gedefinieerd dienen te worden.
Dus: kan dit uberhaupt in php?
Vriendelijke groet,
Frank
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/**
* Constants that deal only with the database
*/
class DbConstant extends aClassConstant {
protected $host = 'localhost';
protected $user = 'user';
protected $password = 'pass';
protected $database = 'db';
protected $time;
function __construct() {
$this->time = time() + 1; // dynamic assignment
}
}
?>
/**
* Constants that deal only with the database
*/
class DbConstant extends aClassConstant {
protected $host = 'localhost';
protected $user = 'user';
protected $password = 'pass';
protected $database = 'db';
protected $time;
function __construct() {
$this->time = time() + 1; // dynamic assignment
}
}
?>
Source
Als je er protected voor zet, mag je er geen andere waarden aan geven.
Gewijzigd op 03/05/2012 12:10:31 door Chris PHP
Gewijzigd op 03/05/2012 12:20:18 door Frank de Winkel
Quote:
"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
-Douglas Adams
-Douglas Adams
Properties zul je nooit public moeten maken naar mijn mening, je moet altijd controle houden over wat er in een klasse is aan values.
Als je dan de properties protected of private maakt kun je zo'n check uitvoeren met de magic method __set met public properties lukt dat niet.
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
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
<?php
class Foo
{
protected $bar;
protected $foo;
private $baz;
public function __set($id, $value)
{
if (in_array($id, get_object_vars($this))) {
$this->$id = $value;
}
else {
throw new InvalidArgumentException(sprintf('The property %s:%s does not exists', __CLASS__, $id);
}
}
}
$foo = new Foo();
$foo->bar = 'hallo'; // werkt geweldig
$foo->baz = 'world'; // werkt ook
$foo->foo = 'lorem'; // en nog een die werkt
$foo->fo = 'ipsum'; // dit geeft een InvalidArgumentException
?>
class Foo
{
protected $bar;
protected $foo;
private $baz;
public function __set($id, $value)
{
if (in_array($id, get_object_vars($this))) {
$this->$id = $value;
}
else {
throw new InvalidArgumentException(sprintf('The property %s:%s does not exists', __CLASS__, $id);
}
}
}
$foo = new Foo();
$foo->bar = 'hallo'; // werkt geweldig
$foo->baz = 'world'; // werkt ook
$foo->foo = 'lorem'; // en nog een die werkt
$foo->fo = 'ipsum'; // dit geeft een InvalidArgumentException
?>
Gewijzigd op 03/05/2012 12:32:50 door Wouter J
Wouter J op 03/05/2012 12:29:30:
Properties zul je nooit public moeten maken naar mijn mening, je moet altijd controle houden over wat er in een klasse is aan values.
Als je dan de properties protected of private maakt kun je zo'n check uitvoeren met de magic method __set met public properties lukt dat niet.
Quote:
"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
-Douglas Adams
-Douglas Adams
Properties zul je nooit public moeten maken naar mijn mening, je moet altijd controle houden over wat er in een klasse is aan values.
Als je dan de properties protected of private maakt kun je zo'n check uitvoeren met de magic method __set met public properties lukt dat niet.
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
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
<?php
class Foo
{
protected $bar;
protected $foo;
private $baz;
public function __set($id, $value)
{
if (in_array($id, get_object_vars($this))) {
$this->$id = $value;
}
else {
throw new InvalidArgumentException(sprintf('The property %s:%s does not exists', __CLASS__, $id);
}
}
}
$foo = new Foo();
$foo->bar = 'hallo'; // werkt geweldig
$foo->baz = 'world'; // werkt ook
$foo->foo = 'lorem'; // en nog een die werkt
$foo->fo = 'ipsum'; // dit geeft een InvalidArgumentException
?>
class Foo
{
protected $bar;
protected $foo;
private $baz;
public function __set($id, $value)
{
if (in_array($id, get_object_vars($this))) {
$this->$id = $value;
}
else {
throw new InvalidArgumentException(sprintf('The property %s:%s does not exists', __CLASS__, $id);
}
}
}
$foo = new Foo();
$foo->bar = 'hallo'; // werkt geweldig
$foo->baz = 'world'; // werkt ook
$foo->foo = 'lorem'; // en nog een die werkt
$foo->fo = 'ipsum'; // dit geeft een InvalidArgumentException
?>