Chiamare una function membro preparare () Cosa c'è di sbagliato in questo? OOP

Va bene ho questa class (includerà solo l'intestazione e la prima function).

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 

Per qualche motivo ora sto ricevendo questo errore

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

Ha funzionato bene prima, iniziando questo dopo che ho convertito per usare le lezioni di autoload.

Pagina di logging:

 include ("inc/config.inc.php"); $users = new Users; 

Ed è così che uso la function per registrare (l'errore si verifica qui):

  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(); } 

Non riesco davvero a pensare a niente.

Sto includendo db.inc.php, che ha la connessione DB in esso con var $ pdo che è un object, PHP dice che non è? …

  $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(); } 

Che cosa ho fatto di sbagliato? Perché lo fa? Molte grazie.

ed è così che carico automaticamente:

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

Il modo migliore per get $ pdo in un object che ne ha bisogno è con l'iniezione delle dependencies. Come questo.

 class Users { private $insert; ... private $pdo; public function __construct($pdo) { $this->pdo = $pdo; } public function register(...) { ... $this->pdo->prepare(...); ... } } 

Quindi nella tua pagina di logging

 include ("inc/config.inc.php"); include ("inc/db.inc.php"); $users = new Users($pdo);