anpera.net https://anpera.dyndns.org/phpbb3/ |
|
Readonly-Array (PHP5) https://anpera.dyndns.org/phpbb3/viewtopic.php?f=43&t=4316 |
Seite 1 von 1 |
Autor: | Eliwood [ Fr 08 Feb, 2008 16:28 ] |
Betreff des Beitrags: | Readonly-Array (PHP5) |
Ich habe heute als Nebenprodukt einiger meiner Arbeiten eine Möglichkeit gefunden, Arrays als readonly zu markieren. Ich hab zwar absolut keine Ahnung, was das fürn Sinn macht, aber naja ![]() Vielleicht kannst ja wer brauchen. Für Einstellungen oder so, die man während dem Script nicht mehr ändern sollte. Wirft wahlweise Fehler, oder eben keine (Standard-Einstellung ist ohne Fehlermeldungen). Achtung: Die Fehlermeldungen funktionieren *nur* mit eindimensionalen Arrays. Zweidimensionale können auch eingegeben werden, allerdings werfen sie keine Fehler, da die Funktion offsetSet nie aufgerufen wird. Code: $this->bbcode_second_pass_code('', 'class ReadonlyArray implements ArrayAccess, Countable { /** * 2008 by Basilius "Wasili" Sauter * "Kreiert" ein readonly-"Array" * Veröffentlicht unter Public Domain, wo möglich, ansonsten GPL in der Version 2.0 oder CCL by-nc-sa 2.0 */ protected $data; protected $showerrors; public function __construct(array $data, $showerrors = false) { $this->data = $data; $this->showerrors = $showerrors; } public function offsetExists($offset) { return array_key_exists($offset, $this->data); } public function offsetGet($offset) { return $this->data[$offset]; } public function offsetSet($offset, $value) { if($this->showerrors === true) { echo "<b>Fatal Error</b>: Try to write in a readonly array (class ReadonlyArray)"; } } public function offsetUnset($offset) { if($this->showerrors === true) { echo "<b>Fatal Error</b>: Try to delete a key-value-pair from a readonly array (class ReadonlyArray)"; } } public function count() { return count($this->data); } } function markArrayAsReadonly($array, $showerrors = false) { /** * 2008 by Basilius "Wasili" Sauter * "Markiert" ein array als "Readonly" * Veröffentlicht unter Public Domain, wo möglich, ansonsten GPL in der Version 2.0 oder CCL by-nc-sa 2.0 */ return new ReadonlyArray($array, $showerrors); }') Zum Einsatz definiert man einfach ein Array, und übergibt es der Funktion markArrayAsReadonly(). Setzt man den zweiten Parameter auf true, so werden hübsche Fehlermeldungen geworfen. Beispielcode: $this->bbcode_second_pass_code('', '$array = array( 'test' => 'Blub', 'blah' => 'Hihi' ); $array = markArrayAsReadonly($array); echo $array['test']; echo "<br />"; echo $array['blah']; echo "<br />"; $array['blah'] = 'newVal'; echo $array['blah']; echo "<br />";') Ausgabe ohne readonly-Trick: $this->bbcode_second_pass_code('', 'Blub Hihi newVal') Mit readonly-Trick: $this->bbcode_second_pass_code('', 'Blub Hihi Hihi') |
Autor: | Harthas [ Fr 08 Feb, 2008 17:10 ] |
Betreff des Beitrags: | Re: Readonly-Array (PHP5) |
$this->bbcode_second_pass_code('', '$array = markArrayAsReadonly($array, [b]flase[/b]);') ;-) Aber gefällt mir... *g* Herrlich sinnlos ^^' |
Autor: | Eliwood [ Fr 08 Feb, 2008 17:18 ] |
Betreff des Beitrags: | Re: Readonly-Array (PHP5) |
Harthas hat geschrieben: $this->bbcode_second_pass_code('', '$array = markArrayAsReadonly($array, [b]flase[/b]);') ;-) Aber gefällt mir... *g* Herrlich sinnlos ^^' Ubs, geändert (Also entfernt) ![]() Eine Machbarkeitsdemonstration ungefähr.. Hihi ^^ Aber verleitet doch zu intressanten Gedankengängen... ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |