ООП передает конфигурацию классу, который устанавливает значения

у меня есть файлы ini, которые анализируются и устанавливаются в класс, который устанавливает каждое значение либо в константу, либо в переменную класса. такой как это;

function set_val($vals){
    define('VAL,$val['val']);
    define('val1,$val['val1']);
    ....

эта установка констант/переменных продолжается до 20 значений.

каков правильный способ убедиться, что значение $ val ['val1'] установлено с точки зрения ООП? может показаться, что писать много isset() неуместно.

уместно ли создать универсальный класс, который принимает массив $vals и обеспечивает существование значения ключа?

если я использую универсальный класс, как указано выше, насколько я понимаю, правила oop (композиция над наследованием?) говорят, что я не должен создавать объект универсального класса внутри метода set vals?

какое подходящее решение для обеспечения существования ключей при загрузке конфигурации с точки зрения ООП?

ps (я знаю, что не должен использовать константы, но на данный момент без изменения большого количества кода я не уверен, как это сделать)


person user3199357    schedule 20.02.2014    source источник


Ответы (2)


Я знаю, что это потребует много isset(), но да, это лучшее решение, которое я мог придумать.

function set_val($vals){
    isset($val['val']) ? define('VAL,$val['val']); : 'false'; //Ignore false
person Krimson    schedule 20.02.2014
comment
Наличие констант проверяется не с помощью isset, а с помощью define, au2.php.net/defined - person TheNavigat; 21.02.2014
comment
Код проверяет существование $val[...] не константы - person Krimson; 21.02.2014

<?php

$ini_values=array('CONSTA'=>1,'CONSTC'=>3); //For testing

set_val($ini_values);

function set_val($ini_values){
$required_consts=array('CONSTA','CONSTB','CONSTC'); //Array of constants you need
//...
 foreach($required_consts as $required_const){
  if(!empty($ini_values[$required_const])){
   define($required_const,$ini_values[$required_const]);
  }else{
    echo"<br />Value for $required_const missing<br />"; //Handle here
  }
 }
//...
}

//Show result for testing
echo CONSTA;
echo'<br />';
echo CONSTB;
echo'<br />';
echo CONSTC;

?>

Вывод:

Value for CONSTB missing
1
CONSTB
3
person JBES    schedule 20.02.2014
comment
выглядит хорошо, но вызывает опасения, основанные на исходном сообщении, таком как соответствующий oop. это устанавливает константы, как насчет аналогичных действий, которые устанавливают переменные класса. также вышеизложенное является функцией, если бы это был класс и общий, как/где будет установлен ini_values=array() и где будет вызываться set_val() и т. д. - person user3199357; 21.02.2014
comment
Ваш первоначальный запрос - убедиться, что константы установлены. Вышеизложенное поможет вам достичь этого на основе предоставленного вами примера кода. Вам решать, использовать ли объектно-ориентированный класс или нет, в зависимости от сложности вашего кода. Вам нужно использовать класс в нескольких ситуациях? Вы можете определить свой массив через объект класса, и то же самое относится к вызову функции. См. php.net/manual/en/language.oop5.php. - person JBES; 22.02.2014