Hashtable přístup pomocí ->name
- kutilm
- Člen | 21
Ahoj,
chtěl jsem použít Hashtable a přístup k položkám pomocí
->name
, ale nějak to nefunguje, přístup přes
['name']
je funkční.
<?php
$arr = array('a' => 'jedna', 'b' => 'dve', 'c' => 'tri');
$hashtable = new Hashtable($arr);
Debug::dump($hashtable['a']);
//string(5) "jedna"
Debug::dump($hashtable->a);
//MemberAccessException: Cannot read an undeclared property Hashtable::$a.
?>
Poradíte, kde dělám chybu, nebo přístup přes ->name
není možný?
Děkuji
- PetrP
- Člen | 587
Hashtable přístup přes properties nemá.
Nicmnéně ArrayObject má flags v constructoru a ArrayObject::setFlags()
Hashtable sice constructor bohužel přepisuje ale možnost přes setflags
existuje:
$h = new Hashtable(array(
'a'=>1,
'b'=>1,
'c'=>1,
'd'=>1,
'e'=>1,
));
$h->setFlags(ArrayObject::ARRAY_AS_PROPS); // nebo jen $h->setFlags(2);
d($h['a']);
d($h->a);
Nebo můžes použít třeba Config které si pro to podporu samo vytváří ;]
- PetrP
- Člen | 587
Když jsem psal že u Hashtable to zapneš takto:
$hashtable->setFlags(ArrayObject::ARRAY_AS_PROPS);
Je to vlastnost ArrayObject což je předek hashtable; není to uplně nejpohodlnější, ale funkční.
Třeba se david vyjádrí jestli by nechtěl dát tu možnost jako třetí
parametr do Collection::__construct()
kde to přepisuje z
ArrayObject::__construct()
. Případně jí zapnout defaultně
(jestli to není zabyják výkonu), nebo u hastable přidat __get a __set jako
má Config.