0

オンラインストア用に以下のクラスがあります。

このスーパー クラスは、子クラスで使用されるすべての一般的なメソッドを保持します。

class grandpa
{
    public function test1($string)
    {
        return $string;
    }
}

PDO接続も同様です。

class database_pdo extends grandpa
{
    protected $connection = null;
    protected $dsn,$username,$password;

    public function __construct($dsn,$username,$password)
    {
        $this->dsn = $dsn;
        $this->username = $username;
        $this->password = $password;
        $this->get_connection();
    }

    public function get_connection()
    {
        try
        {
            $this->connection = new PDO($this->dsn, $this->username, $this->password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
            $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
        }
        catch (PDOException $e) 
        {
            $this->get_error($e);
        }
    }

    public function __sleep()
    {
        return array('dsn', 'username', 'password');
    }


    public function __wakeup()
    {
        $this->get_connection();
    }

    public function get_error($e) 
    {
        $this->connection = null;
        die($e->getMessage());
    }

    public function __destruct()
    {
       $this->connection = null;
    }
}

このクラスは、pdo 接続を必要とする他の一般的なメソッドのために pdo から拡張されています。

class papa extends database_pdo
{
    protected $connection = null;

    public function __construct($connection)
    {
        $this->connection = $connection;

    }

    public function test2($string)
    {
        return $string;
    }

}

子クラスは、

class kido_1 extends papa
{

    public function __construct($connection)
    {
        parent::__construct($connection);
    }

    public function test3($string)
    { 
        return $string;
    }
}

上記のクラスをどのように使用するか、

# Host used to access DB.
define('DB_HOST', 'localhost');

# Username used to access DB.
define('DB_USER', 'xxx');

# Password for the username.
define('DB_PASS', 'xxx');

# Name of your databse.
define('DB_NAME', 'xxx'); 

# Data source name.
define('DSN', 'mysql:host='.DB_HOST.';dbname='.DB_NAME);

$connection = new database_pdo(DSN,DB_USER,DB_PASS);

$kido = new kido($connection);

$_SESSION['cart'] = serialize($kido);

$kido = unserialize($_SESSION['cart']);

print_r($kido->test3('hello'));

このエラーが発生します。

無効なデータ ソース名

unserialize()カートデータに必要なことが原因です...

どうすればこれを修正できますか? または、これらのクラスを書き直すより良い方法はありますか?

4

2 に答える 2

0

私が考える解決策...

class papa extends grandpa
{
    protected $connection = null;

    public function __construct($connection)
    {
        $this->connection = $connection;

    }

    public function test2($string)
    {
        return $string;
    }

}
于 2012-06-19T00:47:01.613 に答える