Hallo,
Problem: im nachfolgenden code werden die einträge der Klassen-variable $_data zur referenz auf sich selbst. Dadurch sind diese von aussen manipulierbar.
Allerdings wurde $this->_data nie als referenz definiert, sondern nur keys innerhalb von $this->_token, die auf keys von $this->_data verweisen.
Ich bin mit meinem Latein am Ende. Ist es ein Bug oder missverstehe ich nur (was ich da tue). Freue mich sehr über ein Feedback und ggf. Hilfestellung!
getestet mit PHP 5.5.13 und 5.3.10
Vielen Dank schonmal!
Problem: im nachfolgenden code werden die einträge der Klassen-variable $_data zur referenz auf sich selbst. Dadurch sind diese von aussen manipulierbar.
Allerdings wurde $this->_data nie als referenz definiert, sondern nur keys innerhalb von $this->_token, die auf keys von $this->_data verweisen.
Ich bin mit meinem Latein am Ende. Ist es ein Bug oder missverstehe ich nur (was ich da tue). Freue mich sehr über ein Feedback und ggf. Hilfestellung!
getestet mit PHP 5.5.13 und 5.3.10
Vielen Dank schonmal!
PHP-Code:
abstract class bla {
protected $_data = array();
abstract protected function _setRef();
public function __construct() {
$this->_data = array(
'a' => 'b'
);
$this->_setRef();
}
public function getData() {
return $this->_data;
}
}
class blub extends bla {
protected $_token = array();
protected function _setRef() {
foreach ($this->_data as $k => $v) {
//auskommentieren der nächsten zeile lässt $this->_data wie erwartet verhalten
$this->_token[$k] =& $this->_data[$k];
}
}
}
$c = new blub();
$b = $c->getData();
var_dump($b);
/*
result:
array (size=1)
'a' => &string 'b' (length=1)
*/
$b['a'] = 'd';
var_dump($c->getData());
/*
result:
array (size=1)
'a' => &string 'd' (length=1)
but expected:
array (size=1)
'a' => &string 'b' (length=1)
*/
Kommentar