На некоторых "не_очень_хороших" хостингах любят безальтернативно отключать некоторые функции через php.ini
. В частности иногда полезную parse_ini_file
. В своем проекте (легковесный скелет api) обошел таким образом:
if (function_exists('parse_ini_file')) {
self::$settings = parse_ini_file(PROPERTIES);
return;
}
$content = preg_grep("/^[\w .]+=.*/", explode(PHP_EOL, file_get_contents(PROPERTIES)));
foreach ($content as $row) {
$row = strstr($row . ';', ';', true);
$key = trim(strstr($row, '=', true), " \n\r");
$value = trim(strstr($row, '=', false), " \"=\n\r");
self::$settings[ $key ] = $value;
}
Вопрос
Как мне теперь прикрутить PHPUnit
для тестирования куска кода с рукописным парсером?
Идеально было бы задисейблить ее в рантайме, но можно ли это сделать я как-то инфы не нашел.
PS Собственно я нахожусь в самом начале изучения PHPUnit
и, возможно, есть true way, которого просто не знаю.
Зашел с черного хода.
Вынес самописный парсер в отдельный приватный метод
private static function loadSettings() {
self::$settings = function_exists('parse_ini_file')
? parse_ini_file(PROPERTIES)
: self::loadSettingsHard();
}
private static function loadSettingsHard() {
$settings = [];
$content = preg_grep("/^[\w .]+=.*/", explode("\n", file_get_contents(PROPERTIES)));
foreach ($content as $row) {
$row = strstr($row . ';', ';', true);
$key = trim(strstr($row, '=', true), " \n\r");
$settings[ $key ] = trim(strstr($row, '=', false), " \"=\n\r");
}
return $settings;
}
В тестовом методе применил грязный хак с Reflection
public function testGetConfigValueHard() {
$method = new ReflectionMethod(
Config::class, 'loadSettingsHard'
);
$method->setAccessible(true);
$method->invoke(Config::class);
$this->assertEquals(
'localhost',
Config::get('db_host')
);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Если я удаляю из массива с целочисленными индексами элемент, а затем применяю к нему функцию json_encode то получаю строку с JavaScript объектом вместо...
PHP не знаю, к сожалениюПытаюсь прикрутить к сайту готовую форму, код которой нашла в сети
нужно вывести все даты начиная с текущей, и не больше 30 дней