无法在php中使对象访问扩展类方法

时间:2016-03-09 20:20:47

标签: php

我正在尝试使用两个不同的类在PHP中建立数据库连接。我的对象创建出错:

  

错误:解析错误:语法错误,意外' $ obj' (T_VARIABLE),期待函数(T_FUNCTION)

此行发生错误:$obj = new UserController();

这是我的Connection课程:

class Connection
{
    public $servername = "localhost";
    public $username = "root";
    public $password = "";
    public $dbname = "web-portal";


    function database (){    
        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
            return $conn;
        } else {
            return $conn;
        }
    }
}

这是我的UserController课程:

class UserController extends Connection  {      
    $obj = new UserController();   
    //$obj->database(); 

    function getUser ($userId) {

        // Sql query to select record from user table
        $sql = "SELECT *  FROM User where user_id = ".$userId;

        //Excute  sql query
        $result = $conn->query($sql);

        //If record exists
        if ($result->num_rows > 0) {
            // output data of each row
            $row = $result->fetch_assoc();
            $conn->close();
            return $row;
        } else { 
            //If no record exists return row 0
            $row = 0;
            return  $row;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

一些一般性指导:

  • 对象定位侧重于事物(例如数据库连接)和继承,它允许事物的特化(例如,MySQL数据库连接是数据库连接的类型)。但是,UserController不是Connection,因此这不是一个好的继承 - UserController应该从Controller或类似的东西继承。
  • 如果要导入数据库功能,可以使用特征。这允许您导入不属于父类或祖先类的方法。但是,对于OO设计而言,特征并不是完全必要的,如果您是初学者,您可能希望暂时不管它们。
  • 在您的控制器中,您希望获得连接,而不是$result = $conn->query($sql)您可能需要$this->database()->query($sql)。无论如何,$conn都无法使用。
  • 您的查询有SQL injection vulnerability,因此请勿将此类代码置于其中。
  • 您需要执行$obj = new UserController()但这属于另一个文件,如下所示:

    require_once 'Connection.php';
    require_once 'UserController.php';
    
    $controller = new UserController();
    $row = $controller->getuser(1);
    print_r($row);
    

您可能会发现一种好的方法是在网上完成一些好的教程 - 从长远来看,这可能比在没有指导的项目上挣扎更快。