Php 实例化变量=新对象;

Php 实例化变量=新对象;,php,class,object,Php,Class,Object,我开始做php OO(我知道javaOO),但我希望有人能帮我实例化一个变量,这样我就可以调用它的方法了 几个小时前,我读了一篇文章,我会这么做。如何将对象会话从PHP传递到MySQL 我把所有的类都放在GitHub端 我正在使用本教程: 全2级: 我正在尝试与以下对象建立联系: $ObjSession = new Session; // this line get a error and not work 我怎么了 更新于2016年1月13日16;47 这是我的错误: Warning Ca

我开始做php OO(我知道javaOO),但我希望有人能帮我实例化一个变量,这样我就可以调用它的方法了

几个小时前,我读了一篇文章,我会这么做。如何将对象会话从PHP传递到MySQL

我把所有的类都放在GitHub端

我正在使用本教程:

全2级:

我正在尝试与以下对象建立联系:

$ObjSession = new Session; // this line get a error and not work 
我怎么了

更新于2016年1月13日16;47

这是我的错误:

Warning Call to a member function prepare() on a non-object
课堂会话

class Session
{
    private $db;

    public function __construct() {

        // instantiate the new database object
        $this->db = new Database();

        // set handler to override session
        session_set_save_handler(
            array($this, "_open"),
            array($this, "_close"),
            array($this, "_read"),
            array($this, "_write"),
            array($this, "_destroy"),
            array($this, "_gc")
        );

        // start the session
        session_start();
    }

    // check if the database connection is up
    public function _open() {
        if ($this->db) {
            return true;
        } 

        return false;
    }

    // close the database connection
    public function _close() {
        if ($this->db->close()) {
            return true;
        }

        return false;
    }

    // read session values
    public function _read($id) {
        $this->db->query('SELECT data FROM sessions WHERE id = :id');

        if ($this->db->execute(array($id))) {
            $row = $this->db->single();
            return $row->data;
        } else {
            return '';
        }
    }

    // write session values
    public function _write($id, $data) {
        $access = time();
        $this->db->query('REPLACE INTO sessions VALUES (:id, :access, :data)');

        if ($this->db->execute(array($id, $access, $data))) {
            return true;
        }

        return false;
    }

    // destroy session
    public function _destroy($id) {
        $this->db->query('DELETE FROM sessions WHERE id = :id');
        if ($this->db->execute(array($id))) {
            return true;
        }

        return false;
    }

    // garbage collection
    public function _gc($max) {
        $old = time() - $max;

        $this->db->query('DELETE * FROM sessions WHERE access < :old');

        if ($this->db->execute(array($old))) {
            return true;
        }

        return false;
    }
}
define("DB_HOST", "");
define("DB_NAME", "");
define("DB_USER", "");
define("DB_PASS", "");

class Database
{
    private $host = DB_HOST;
    private $user = DB_USER;
    private $pass = DB_PASS;
    private $dbname = DB_NAME;
    private $dbh;
    private $error;
    private $stmt;
    public function __construct() {
        // set DSN
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        // set OPTIONS
        $options = array(
                PDO::ATTR_PERSISTENT => true,
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        );
        // create a new PDO instance or catch any errors
        try {
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }

    // prepare statement
    public function query($query) {
        $this->stmt = $this->dbh->prepare($query);
    }

    // bind values and execute statement
    public function execute(array $params = null) {
        $this->stmt->execute($params);
    }

    // fetch single row result
    public function single() {
        try {
            return $this->stmt->fetch(PDO::FETCH_OBJ);
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }

    // fetch all results
    public function resultset() {
        try {
            return $this->stmt->fetchAll(PDO::FETCH_OBJ);
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }

    // fetch output parameter from stored procedure
    public function outParam($paramName, $paramAsName) {
        $this->stmt->closeCursor();
        return $this->dbh->query('SELECT ' . $paramName . ' AS ' . $paramAsName)->fetch(PDO::FETCH_OBJ);
    }

    // get affected rows count
    public function rowCount() {
        return $this->stmt->rowCount();
    }

    // get the id of the last inserted row
    public function lastInsertId() {
        return $this->dbh->lastInsertId();
    }

    // begin transaction
    public function beginTransaction() {
        return $this->dbh->beginTransaction();
    }

    // end transaction
    public function endTransaction() {
        return $this->dbh->commit();
    }

    // cancel transaction
    public function cancelTransaction() {
        return $this->dbh->rollBack();
    }

    // debug dump parameters
    public function debugDumpParams() {
        return $this->stmt->debugDumpParams();
    }

    // close connection
    public function close() {
        $this->dbh = null;
    }
}

很抱歉耽搁了,我做其他事情很开心:

解决方案:

我在不太熟悉的同一个文件中出错(最佳导入)

实例化

添加查询/执行(数据库)

重要信息:所有数组都需要一个标记(:)来识别“:variable” =>$变量

$this->db->execute(数组($id))
$this->db->execute(数组(“:id”=>$id))


在完成所有步骤后,您可以将会话保存到mysql

我并没有真正研究它,但您不是简单地忘记了perenthesis吗<代码>新类名()。打开php错误也可能是明智的,这样您就可以看到发生了什么(
error\u reporting(E\u ALL);ini\u set('display\u errors',1);
,并尝试防止使用错误暂停压缩
@
)您遇到了什么错误?开始的php标记应该是
不确定为什么选择不显示错误。。。但在您的代码中,有两次您似乎成功地实例化了新对象。(在这个页面上做一个“查找”让“新建”看到它们。)那么问题到底是什么呢?你不能实例化一个变量。变量可以只包含一个值,例如可以是类的实例(或者更确切地说是对类实例的引用)。这个类的一个实例叫做object。看看这里,
>
,则
数据库
类中的结束标记也错误。
include('database.class.php');
include('session.class.php');
$session = new Session();
PDOException $e