2011-01-05 5 views
1

Ich entschied mich, einige Anwendungseinstellungen von der Datenbank in das Dateisystem zu verschieben, um über Zend_Config erreichbar zu sein. Allerdings laufe ich zu einer nervigen Sache, Zend_Config erkennt alle Werte als String, der den Datentyp ignoriert.Wie man numerische Werte in Zend_Config speichert, ohne seinen Typ zu verlieren?

Gibt es einen magischen Weg, Konfigurationsdatei zu parsen, die Originaltypen wie float, integer, string und was wäre der beste Speicher dafür INI, XML, YAML oder JSON?

Antwort

1

Mindestens nicht möglich, mit Zend_Config_Xml:

Konfigurationsdaten in Zend_Config_Xml gelesen werden immer als Strings zurückgegeben. Die Konvertierung von Daten von Strings zu anderen Typen ist Entwickler überlassen, um ihre speziellen Bedürfnisse zu erfüllen.

Nicht sicher über die anderen. Sie können so etwas wie

// config.php 
return array('foo' => 1); 

// bootstrap 
$config = new Zend_Config(include 'config.php'); 
var_dump($config->foo); // int(1) 
+0

Danke für den Vorschlag, fand ich auch, dass Json es zu unterstützen. – Nazariy

1

Zend wird automatisch ganze Zahlen drehen, Schwimmern, und bools in ihre jeweiligen Typen mit JSON und YAML sehr viel tun. XML ist immer ein String, und INI hat alle Vorbehalte und die Macht von parse_ini_file(), wenn es um die Wahl des Typs geht.

Wenn Sie einen expliziten Typ wünschen, z. B. ein bestimmtes Objekt, müssen Sie dies in die serialisierten Daten aufnehmen.

+0

Wie hast du es geschafft Yaml zu tun? – Nazariy

+0

Welcher Teil funktioniert nicht? Sie können erzwingen, dass etwas als Zahl erkannt wird, zB durch !! float 1.2 oder !! int 42, und denken Sie daran, dass y/n im YAML-Land Wahr/Falsch ist. (Obwohl die vollständige Spezifikation ist ziemlich PHP-wie in was ist ein Bool.) – SilverbackNet

+0

Ich meine in meinem Fall Zahlen werden als Zeichenfolgen, zumindest in Standard-Parser dargestellt. Und es ist seltsam, da Zend_Config_Yaml nur 2 Arten von Werten BOOLEAN und STRING versteht, ich habe versucht, deine Magie auf meine Konfigurationsdatei anzuwenden, aber es funktioniert nicht. – Nazariy