anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 25 Apr, 2024 01:29

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Readonly-Array (PHP5)
BeitragVerfasst: Fr 08 Feb, 2008 16:28 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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 :D
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')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Readonly-Array (PHP5)
BeitragVerfasst: Fr 08 Feb, 2008 17:10 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
$this->bbcode_second_pass_code('', '$array = markArrayAsReadonly($array, [b]flase[/b]);') ;-)

Aber gefällt mir... *g*
Herrlich sinnlos ^^'


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Readonly-Array (PHP5)
BeitragVerfasst: Fr 08 Feb, 2008 17:18 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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... :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 84 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum