виртуальное наследование [дубликат]

Использование PDO и MYSQLi является хорошей практикой для предотвращения инъекций SQL, но если вы действительно хотите работать с функциями и запросами MySQL, было бы лучше использовать

mysql_real_escape_string

$unsafe_variable = mysql_real_escape_string($_POST['user_input']);

Есть больше возможностей для предотвращения этого: например, идентификация - если ввод представляет собой строку, число, символ или массив, есть так много встроенных функций для обнаружения этого. Кроме того, было бы лучше использовать эти функции для проверки входных данных.

is_string

$unsafe_variable = (is_string($_POST['user_input']) ? $_POST['user_input'] : '');

is_numeric

$unsafe_variable = (is_numeric($_POST['user_input']) ? $_POST['user_input'] : '');

И гораздо лучше использовать эти функции для проверки входных данных с помощью mysql_real_escape_string.

57
задан Mateen Ulhaq 15 May 2011 в 08:26
поделиться

1 ответ

Виртуальное наследование используется для решения проблемы DDD (Ужасный Ромб на Деривации).

Взгляд на следующий пример, где у Вас есть два класса, которые наследовались тому же базовому классу:

class Base
{

public:

 virtual void  Ambig();

};
<час>
class C : public Base
{

public:

//...

};

class D : public Base
{
public:

    //...

};
<час>

Теперь, Вы хотите создать новый класс, который наследовался и C и классам D (который оба наследовали Основу:: Ambig () функция):

class Wrong : public C, public D
{

public:

...

};

при определении "Неправильного" класса выше Вы на самом деле создали DDD (Ромбовидная проблема Деривации), потому что Вы не можете звонить:

Wrong wrong;
wrong.Ambig(); 

Это - неоднозначная функция, потому что она определяется дважды:

Wrong::C::Base::Ambig()

И:

Wrong::D::Base::Ambig()

для предотвращения этого вида проблемы, необходимо использовать виртуальное наследование, которое будет знать для обращения к праву Ambig() функция.

Так - определите:

class C : public virtual Base

class D : public virtual Base

class Right : public C, public D
44
ответ дан ShdNx 24 November 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: