Я пытаюсь изменить phpgraphlib так, чтобы я мог генерировать легенду, когда используются несколько цветов панели. Я добавил массив с цветами в качестве необязательного параметра в generateLegend (), но, похоже, он не работает. Я не знаю что не так. У меня нет опыта работы с PHP, но мне показалось, что передача массива в качестве необязательного параметра должна быть возможной
Вот мой код:
protected function generateLegend(array $colors = array())
{
// here is some code
if($this->bool_multi_color_bars) {
// gets here
if (!empty($colors)) {
// doesn't get here
$index = 0;
foreach($colors as $key => $item) {
// here is some code that creates the colored boxes
$index++;
}
}
}
}
А вот код, который вызывает функцию:
$colors = array();
foreach($data as $key => $value) {
if($value < 3) {
$colors[$key] = 'green';
}
elseif($value < 8) {
$colors[$key] = 'orange';
}
else {
$colors[$key] = 'red';
}
}
$graph->setBarColors($colors);
$graph->setLegend(true, $colors);
$graph->createGraph();
РЕДАКТИРОВАТЬ: generateLegend () вызывается с следующим кодом:
if ($this->bool_legend) {
$this->generateLegend();
}
Для удобства чтения я оставил большую часть кода, но я вижу, что метод вызывается (поэтому я добавил комментарии, где код получает и нет)
Я не уверен, что вы на самом деле хотите. То, что вы сейчас видите, — это ожидаемое поведение empty
, Массив без элементов является пустой.
var_dump(empty([])); // true
Если вы хотите проверить, был ли установлен необязательный параметр, вы можете использовать func_num_args
,
if (func_num_args() > 0) {
// $colors was set
}
Или используйте другой аргумент по умолчанию и проверьте тип.
function foo(array $bar = null) {
if ($bar === null) {
// ...
}
}
Других решений пока нет …