Обновление цикла foreach PHP следующим образом
foreach($stmt->fetchAll() as $row)
{
$data .= '<tr>
<td style="width:150px;border:1px solid grey;">'. $row['field_id'] .'</td>
<td style="width:150px;border:1px solid grey;">'. $row['description'] .'</td>
<td style="width:150px;border:1px solid grey;">'. $row['corner_points'] .'</td>
<td style="width:150px;border:1px solid grey;">'. $row['damming_level_distance_map'] .'</td>
<td style="width:150px;border:1px solid grey;">'. $row['pipeline_distance_map'] .'</td>
<td style="width:150px;border:1px solid grey;">'. $row['notes'] .'</td>
</tr>';
}
... Отметьте, Herb Sutter написал 3 превосходных статьи о множественном наследовании (1) здесь, (2) здесь и (3) здесь. Он записал целый другой набор полезных статей в guru-of-the-week здесь. Наиболее рекомендуемый...
Во-первых, я не уверен, что разбираюсь в Вашей иерархии. Я беру его, это похоже на это:
struct A {
virtual void F() = 0;
};
struct B : A { void F() { } };
struct C : A { };
struct D : B, C { };
Ну, D абстрактен, потому что существует два A
подобъекты в объекте типа D: Тот, который сделан конкретным B
через решетку B и ту, которая все еще абстрактна в прохождении через решетки C
. Я беру его, у Вас есть указатель на D
и попытайтесь звонить F
. Да, неоднозначность возникает, потому что компилятор находит две функции F
в двух отдельных решетках:
D -> B::F
D -> C -> A::F
Сходство с этим:
F() F()
A A
| |
F() B C
\ /
D
Можно зафиксировать ту ситуацию официально путем получения из фактически:
struct B : virtual A { void F() { } };
struct C : virtual A { };
struct D : B, C { };
У Вас затем есть эта ситуация, названная ромбовидным наследованием:
F()
A
/ \
F() B C
\ /
D
И делая поиск, это находит, что существует B::F
переопределение A::F
. Хотя A::F
может все еще быть достигнут через D::C::A
, это больше не неоднозначность, потому что A
был наследован виртуальный.
Является ли это правильным решением в Вашей конкретной проблеме - это, конечно, не бесспорно. Чаще всего существуют лучшие пути, чем получение виртуального от класса. К Вашему вопросу о слиянии таблиц виртуальной функции - это полностью в зависимости от реализации. GCC
, насколько я знаю, сохранит указатель на тот экземпляром в виртуальной таблице D
, если мы происходим виртуальный.
Действительно ли это - правильное решение для проблемы?
"Ромбовидное" наследование проблематично, и корректное объяснение решения берет немного объяснения. Я рекомендую прочитать следующие главы Эффективного C++ Meyers':