Вы можете использовать функцию обратного вызова вместо:
$row[]='if else here';
$row[]='<ul class="dropdown-menu">
<li><input type="button" class="w3-button w3-block w3-teal edit" value="Edit" id="'.$po_invoice->id.'"></li>
<li><input type="button" class="w3-button w3-block w3-red delete" value="Delete" id="'.$po_invoice->id.'"></li>
</ul>';
Вы можете сделать что-то вроде этого:
$row[]=function($id) use ($po_invoice) {
if ($id->type=='super_user' OR $id->type=='user'){
echo '<ul class="dropdown-menu">
<li><input type="button" class="w3-button w3-block w3-teal edit" value="Edit" id="'.$po_invoice->id.'"></li>
<li><input type="button" class="w3-button w3-block w3-red delete" value="Delete" id="'.$po_invoice->id.'"></li>
</ul>';
}else{
echo '';
}
};
Тогда позже вы просто сделаете это:
$row($id); //or $row[0]($id); or what have you
Песочница
Ключевое слово use
используется для передачи «дополнительных» данных в функцию , когда она объявлена , обычные аргументы передают данные, когдаэто выполнено .
В целом, это плохой способ реализовать его, я просто хотел показать его как вариант.Главным образом это будет плохо от обслуживания и читаемости / стандартизации типа кадра.Под этим я подразумеваю, что было бы хорошо, если бы все элементы в массиве имели одинаковые базовые входные данные и в них все обратные вызовы.Проблема заключается в сопоставлении аргументов с элементами массива, которые вы не можете получить, какого типа элемент находится в массиве (функция, HTML и т. Д.), И у вас не будет возможности узнать аргументы заранее.Если вам нужно смешивать типы и аргументы между различными обратными вызовами.
Надеюсь, это имеет смысл.
В любом случае, в некоторых ситуациях это может быть отличным способом для полиморфного поведения.
PS не забудьте поставить $row = array();
вне цикла, как указано в другом ответе.
Примечание также естьразница между OR
и ||
, в данном случае это не применимо, но версия слова имеет более низкий приоритет, чем булева версия, поэтому вы можете столкнуться с ситуацией, когда все идет не так, как вы ожидаете, если вы смешаете два.