接口可能不包含成员变量错误

时间:2019-05-26 13:25:33

标签: php mysql oop mysqli pdo

我为我的项目创建了一个名为insert的接口,其外观如下:

<?php 
interface Insert
{   
    private $_db;
    public function __construct()
    {
        $this->_db = new Connection();
        $this->_db = $this->_db->dbConnect();
    }
    public function insert($table_name, $data)
    {
        $string = "INSERT INTO ".$table_name." (";
        $string .= implode(",", array_keys($data)) . ') VALUES (';
        $string .= "'" . implode("','", array_values($data)) . "')";
        if(mysqli_query($this->_db, $string))
        {
            return true;
        }
        else
        {
            echo mysqli_error($this->con);
        }
    }
}
?>

但是它给了我这个错误:

致命错误:接口可能不包含成员变量

那我的错是什么?

1 个答案:

答案 0 :(得分:1)

这是使用界面的正确方法:

<?php 

interface Insert
{
    public function insert($table_name, $data);
}

class Database implements Insert
{
    private $_db;
    public function __construct()
    {
        $this->_db = new Connection();
        $this->_db = $this->_db->dbConnect();
    }

    public function insert($table_name, $data)
    {
        $string = "INSERT INTO ".$table_name." (";
        $string .= implode(",", array_keys($data)) . ') VALUES (';
        $string .= "'" . implode("','", array_values($data)) . "')";
        if(mysqli_query($this->_db, $string))
        {
            return true;
        }
        else
        {
            echo mysqli_error($this->con);
        }
    }
}

接口内部没有任何实现(代码)。您仅在其中定义了实现(使用)此接口的类的方法的定义。而且,如果该类实现了接口,则它必须具有一个具有相同数量输入参数,其类型并返回相同类型值的方法。因此,基本上,Interface只是一种契约,您可以指定实现类(数据库)的类必须具有哪些方法以及其外观如何才能实现接口契约。

实现接口的类中的方法代码由您自己决定,并且接口不会告诉应该如何在方法内部执行代码,而只是告诉这些方法应采用哪些输入参数以及返回值的类型是预期的。