Мне нужно определить набор переменных для серии
$charta ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/aplha.png" alt ="" />';
$chartb ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/bravo.png" alt ="" />';
$chartc ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/charlie.png" alt ="" />';
так далее …
Вместо того, чтобы определять их все, как это, я хочу использовать цикл, чтобы определить их с помощью массива
$names = array (
'aplha' => 'a',
'bravo' => 'b',
'charlie' => 'c'
);
Поэтому я попробовал это, прочитав о переменных переменных в документации PHP
foreach($names as $k=>$v){
${'chart' . $v} ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/'.$k.'.png" alt ="" />';
}
И это работает.
Мой простой вопрос — это хорошая / приемлемая практика? Я объяснил свой метод более опытному программисту, и они сказали мне найти другой способ, который не включает переменные переменные, потому что это плохая практика — но я не могу думать ни о том, что с этим не так, ни о том, как это сделать лучше.
Мысли?
Я бы использовал массив с ключом $ v. Это читабельно. Даже лучше:
$names = array(
'a' => 'yourimage1',
'b' => 'yourimage2',
'c' => 'yourimage3',
);
function chartImage($img_string = 'your-default-img')
{
return '<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/'.$img_string.'.png" alt ="" />';
}
// somewhere in your code
print chartImage($names['a']); // or
<?= chartImage($names['a']); ?>
Я бы сделал это так, потому что легко увидеть, что ты делаешь. Лучшая читаемость.
Переменные переменные — плохая практика, когда вы определили данные. Там нет причин, чтобы использовать его. Переменные переменные используются, когда вы имеете дело с данными, которые неизвестны. Поскольку вы знаете и заранее определяете переменные в последовательности, переменные переменные не добавляют улучшений и могут сильно запутать второй взгляд при просмотре кода.
Хороший пример использования переменных переменных — в опросах. Вы не уверены, сколько будет проверок или ответов, и поэтому вы будете кодировать переменные, содержащие данные переменных. Когда я создал систему опроса, я создал переменные, которые содержали переменные данные массивов, работающих с типами проверки и типами ввода. Все сводится к контексту и решению проблемы. Использование переменных переменных в вашем контексте не является решением проблемы.
Других решений пока нет …