PHP constanten meerdere keren inlezen
Ik heb een applicatie die een aantal configuratiebestanden inleest. Die bestanden bevatten constanten met dezelfde naam. Ik wil graag de waardes van al die constanten weten. Dus als een constante in meer dan één bestand voorkomt wil ik elk van die waardes weten.
Het normale effect zal zijn dat als ik het tweede bestand inlees het een foutmelding geeft voor al gedefiniëerde constanten en de nieuwe setting negeert. Namespaces helpen daar niet tegen.
Het lijkt erop dat tekstanalyse met reguliere expressies de enig oplossing is.
Weet iemand nog een andere oplossing?
Het normale effect zal zijn dat als ik het tweede bestand inlees het een foutmelding geeft voor al gedefiniëerde constanten en de nieuwe setting negeert. Namespaces helpen daar niet tegen.
Het lijkt erop dat tekstanalyse met reguliere expressies de enig oplossing is.
Weet iemand nog een andere oplossing?
Ik heb ooit iets vergelijkbaars gemaakt.
Hoe ziet je configuratiebestand eruit in enkele lijnen?
Hoe ziet je configuratiebestand eruit in enkele lijnen?
Gewoon, een aantal regels zoals:
define('DATABASE', 'worldpress');
define('DATABASE', 'worldpress');
Want je wilt dit (eenmalig) inventariseren? Dan zou ik gewoon je editor door alle bestanden laten zoeken (weet niet welke je gebruikt, maar de meeste hebben wel zo'n functie).
Of je wilt dit zo gaan gebruiken in code? Dan zou ik een andere opzet kiezen (en niet steeds met regex-en door bestanden heen lopen harken). Je zou bijvoorbeeld een array kunnen maken met alle varianten, en dan bij de specifieke defines de juiste "overnemen".
Of je wilt dit zo gaan gebruiken in code? Dan zou ik een andere opzet kiezen (en niet steeds met regex-en door bestanden heen lopen harken). Je zou bijvoorbeeld een array kunnen maken met alle varianten, en dan bij de specifieke defines de juiste "overnemen".
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
//all-config.php
define('DATABASES',[
'foo' => 'Worldpress',
'bar' => 'Ander'
]);
//config.php
require('all-config.php');
define('DATABASE',DATABASES['foo']);
define('DATABASES',[
'foo' => 'Worldpress',
'bar' => 'Ander'
]);
//config.php
require('all-config.php');
define('DATABASE',DATABASES['foo']);
Gewijzigd op 14/09/2020 11:31:51 door Rob Doemaarwat
Kijk eens naar https://www.php.net/manual/en/function.get-defined-constants.php
En dan vooral naar de user-key
En dan vooral naar de user-key
Constanten kunnen maar 1x gedefinieerd worden. Daarna blijven ze ... constant :-)
Dat je dus constanten hebt met dezelde naam, daar gaat het mis. Een constante kan maar 1x voorkomen.
Je zult dus de naamgeving moeten aanpassen.
Dat je dus constanten hebt met dezelde naam, daar gaat het mis. Een constante kan maar 1x voorkomen.
Je zult dus de naamgeving moeten aanpassen.
Je kunt constanten binnen namespaces definiëren:
https://www.php.net/manual/en/language.namespaces.fallback.php
Daarmee kun je gelijktijdig gelijknamige constanten gebruiken, zolang ze maar in een andere namespace zijn gedefinieerd.
Maar misschien maak ik het daarmee wel te ingewikkeld en heb je alleen maar een controle met defined() nodig om conflicten te voorkomen. ;-)
https://www.php.net/manual/en/language.namespaces.fallback.php
Daarmee kun je gelijktijdig gelijknamige constanten gebruiken, zolang ze maar in een andere namespace zijn gedefinieerd.
Maar misschien maak ik het daarmee wel te ingewikkeld en heb je alleen maar een controle met defined() nodig om conflicten te voorkomen. ;-)




