0

さて、私はこのクラスを持っています(ヘッダーと最初の関数のみを含めます)。

require_once("./inc/db.inc.php");   

class Users
{



    /**
    * Properties
    **/

    private $insert;

    protected $user;

    protected $email;

    protected $get;

    protected $check;

    protected $generate;

    protected $drop;


    /**
    * PUBLIC function Register
    *
    * Registers the user to the system, checking for errors.
    * If error was found, it will throw new exception.
    *
    * @parm username The username the user posted.
    * @parm password The password the user posted.
    * @parm repassword The validated password the user posted.
    * @parm email The email the user posted.
    * @parm reemail The validated email the user posted.
    * @parm day The day the user posted (for date of birth).
    * @parm month The month the user posted (for date of birth).
    * @parm year The year the user posted (for date of birth).
    *
    * @return Return true means everything is correct, register successfully.
    **/

    public function register($username, $password, $repassword, $email, $reemail, $day, $month, $year)
    {

        global $pdo;

        // Check if passwords matching.
        if ($password != $repassword)
        {
            throw new exception ("Passwords does not match.");
        }
        // Check if emails matching.
        else if ($email != $reemail)
        {
            throw new exception ("Emails does not match.");
        }

        // The main insert query
        $this->insert = $pdo->prepare
        ("
            INSERT INTO users
            (user_name, user_password, user_email, user_birth)
            VALUES
            (:username, :password, :email, :birth)
        ");
... and so on... ^ error is there

何らかの理由で、このエラーが発生しています

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\drip\class\users.class.php on line 68

以前はうまく機能していましたが、自動ロードクラスを使用するように変換した後、これを開始しました。

登録ページ:

include ("inc/config.inc.php");

$users = new Users;

そして、それが関数を使用して登録する方法です(ここでエラーが発生します):

    try
    {
        $users->register($_POST['user'], $_POST['pass'], $_POST['repass'], $_POST['email'], $_POST['reemail'], $_POST['day'], $_POST['month'], $_POST['year']);
        echo 'Successfully Registered!';
    }
    catch (Exception $e)
    {
        echo $e->getMessage();
    }

本当に何も思いつきません。

オブジェクトであるvar $pdoとのDB接続を持つdb.inc.phpを含めていますが、PHPはそうではないと言います...

        $pdo = new PDO('mysql:host='.MYSQL_HOST.';dbname=driptone', MYSQL_USER, MYSQL_PASSWORD);        

        try
        {
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }

        /**
        * Connection failed, we will print an error.
        * @var e holds the error message.
        **/

        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

私は何を間違えましたか?なぜそれをするのですか?どうもありがとう。

そして、それが私が自動ロードする方法です:

function classAutoLoad($class) {
    if (file_exists("class/$class.class.php"))
        include("class/".$class.".class.php");
}

spl_autoload_register('classAutoload');
4

1 に答える 1

0

$pdo を必要とするオブジェクトに取得する最良の方法は、依存性注入を使用することです。このような。

class Users {
    private $insert;
    ...
    private $pdo;

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

    public function register(...) {
        ...
        $this->pdo->prepare(...);
        ...
    }
}

次に、登録ページで

include ("inc/config.inc.php");
include ("inc/db.inc.php");
$users = new Users($pdo);
于 2013-05-02T16:51:33.467 に答える