PHP Fatal error: Declaration of …MySQLServer::insert() must be compatible with …Server::insert()

318
11 января 2017, 03:58

PHP Fatal error: Declaration of ...MySQLServer::insert() must be compatible with ...Server::insert() in /home/lfLvpx/prog.php on line 102

Почему возникает эта ошибка, и как ее поправить?

abstract class Server
{
public function __construct($token)
{
    if ($token !== $_POST['crm_token']) {
        http_response_code(401);
    } else {
        $this->accept();
    }
}
abstract protected function insert();
...
}
class MySQLServer extends Server
{
protected function insert(mysqli $link, $table, array $required)
{
    $fields     = "`".implode("`, `", $required)."`";
    $fields_num = count( $required );
    $questions  = str_repeat( "?,", $fields_num - 1 ) . "?";
    $query      = "INSERT INTO `$table` ($fields) VALUES ($questions)";
    $data = [];
    foreach( $required as $field ){ 
        $data[] = $_POST[$field];
    }
    $stmt = mysqli_prepare($link, $query );
    $types = str_repeat('s', $fields_num );
    $stmt->bind_param( $types, ...$data );
    $stmt->execute();
}
}
Answer 1

Могу предложить такой вариант для PHP 5.6+

<?php
abstract class Server
{
    public function __construct($token)
    {
        //...
    }
    abstract public function insert(...$params);
}
class MySQLServer extends Server
{
    public function insert(...$params)
    {
        print_r($params);
    }
}
$server = new MySQLServer();
$server->insert(1,2,3);
/**
Вывод в консоли:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
**/

Правда, я не вижу никакой пользы в ООП, если в insert необходимо передавать объект подключения к бд. Вся суть ООП раскроется, если объект будет хранить объекты подключения внутри себя, а наружу отдавать стандартизированные методы. Для реализации чего-то кроме MySQLServer понадобится PDO.

READ ALSO
Поле UUID в Базе Данных

Поле UUID в Базе Данных

Приветствую! Возникла проблема в том чтобы сделать поле в таблицы, которое будет генерировать уникальное значениеНужно оно для создания...

301
Генерация html страниц

Генерация html страниц

Привет всем

407