Ik kon er even geen betere titel voor verzinnen.
Mijn doelstelling is de volgende. Een class heeft als private veld een array. Ik wil de count van deze array kunnen opvragen via een public var, zonder haakjes te hoeven gebruiken.
Dus niet:
maar:
Stel ik heb de volgende basisclass:
Nu ga ik daar een afgeleide van maken:
Als ik dit nu aanroep met deze code:
Dan krijg ik dit als resultaat:
Iemand enig idee waarom?
Mijn doelstelling is de volgende. Een class heeft als private veld een array. Ik wil de count van deze array kunnen opvragen via een public var, zonder haakjes te hoeven gebruiken.
Dus niet:
PHP:
1
| echo $myobj->get_arr_count(); |
maar:
PHP:
1
| echo $myobj->arr_count; |
Stel ik heb de volgende basisclass:
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
| // base class from which all classes will inherit. Handles the array of public members and their getters and setters. class base_class { // protected protected $arr_values; // will contain array of public accessible members // getter public function __get( $key ) { echo "getting value for " . $key . "\n"; if ( array_key_exists( $key, $this->arr_values ) ) { echo "returning value:" . $this->arr_values[$key]. "\n"; return $this->arr_values[$key]; } die( "Can't access that property!\n" . $key . "\n" ); } // setter public function __set( $key, $value ) { echo "setting " . $key ." to " . $value . "\n"; if( array_key_exists( $key, $this->arr_values ) ) { $this->arr_values[$key] = $value; } else { die( "You can't set that property!\n" ); } } // constructor public function __construct() { $this->arr_values = array("classname"=>"base_class"); } // destructor public function __destruct() { unset($this->arr_values); } } |
Nu ga ik daar een afgeleide van maken:
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
| class list_class extends base_class { private $arr_list; public function __construct() { // call constructor (inherited) parent::__construct(); $this->classname = "list_class"; $this->arr_values = array_merge($this->arr_values, array( "list_count"=>0 )); } public function __get( $key ) { if ($key=="list_count") { $this->list_count = is_array($this->arr_list)?count($this->arr_list):0; } parent::__get( $key ); } public function __destruct() { // call destructor (inherited) parent::__destruct(); } public function add_item($item) { $this->arr_list[]=$item; } } |
Als ik dit nu aanroep met deze code:
PHP:
1
2
3
| $obj_test = new list_class; $obj_test->add_item("blaat"); echo "got value:" . $obj_test->list_count . "\n"; |
Dan krijg ik dit als resultaat:
Heel raar dus. De getter retourneert wel netjes 1, maar in mijn applicatie krijg ik een lege var terug?setting classname to list_class
setting list_count to 1
getting value for list_count
returning value:1
got value:
Iemand enig idee waarom?
[ Voor 23% gewijzigd door Verwijderd op 01-10-2005 16:16 ]