2014-01-27 2 views
1

Я очень новичок в php-конструкторах, которых я знаю из java. Но почему-то это не работает. Я следую учебнику, и я не могу получить 1 только 0. Вот два сценария, связанные:php constructor не работает

<?php 

class dbConnection{ 
    protected $db_conn; 
    public $db_name = 'todo'; 
    public $db_user = 'root'; 
    public $db_pass = ''; 
    public $db_host = 'localhost'; 

    function connect(){ 
     try{ 
      $this->db_conn = new PDO("mysql:host=$this->db_host;db_name=$this->db_name",$this->db_user,$this->db_pass); 
      return $this->db_conn; 
     } 
     catch(PDOException $e) 
     { 
      return $e->getMessage(); 
     } 
    } 

} 

?> 

<?php 

include_once('class.database.php'); 

class ManageUsers { 
    public $link; 
    public $constructed; 

    function ManageUsers(){ 
     $db_connection = new dbConnection(); 
     $this->link = $db_connection->connect(); 
     return $this->link; 
    } 

    function registerUser($username,$password,$ip_address,$time,$date){ 
     $query = $this->link->prepare("INSERT INTO users (username,password,ip_address,time,date) VALUES (?,?,?,?,?)"); 
     $values = array($username,$password,$ip_address,$time,$date); 
     $query->execute($values); 
     $counts = $query->rowCount(); 
     return $counts; 
    } 
} 


$users = new ManageUsers(); 

echo $users->registerUser('bob','bob','127.0.0.1','10:00','29-02-2012'); 
?> 
+0

Почему, по вашему мнению, ваш конструктор не работает? Для того, что это стоит, построенный $ будет иметь значение null в вашем методе распечатки, так как это локальная переменная области. Чтобы он был частью объекта, оба экземпляра должны быть $ this-> created –

+0

. Ваш код должен запускать несколько сообщений об ошибках. Я думаю, вы не настроили PHP для отображения сообщений об ошибках и кодирования вслепую. Это то, что вам нужно исправить, прежде чем идти дальше; невозможно правильно закодировать код без помощи сообщений об ошибках. Вот краткое объяснение (http://stackoverflow.com/a/5680885/13508). –

+0

И, что касается обработки ошибок, вы не должны использовать конструкцию 'try/catch' для исключения исключений для простых строк. Это верно и в Java. –

ответ

1

Вы должны попытаться использовать __construct() вместо этого для ManageUsers().

Кроме того, я не совсем уверен, что вы пытаетесь достичь в конструкторе (см мои отметины ниже):

function ManageUsers(){ 
    $db_connection = new dbConnection(); 
    $this->link = $db_connection->connect(); 
    return $this->link; //<--? 
    $constructed = 'Construct'; //<--? 
} 
+0

Да, я добавил, что надеюсь, что в конце я смогу распечатать конструкцию. Ebuti также попробовал эхо и напечатал в этом месте, и ничего на странице не было причиной, по которой я думаю, что это конструктор, у меня нет синтаксических ошибок, и я не могу, если бы и другое мой код и учебные пособия, однако я все же не могу заставить его создать нового пользователя в mysql – Parsalin

+0

Кроме того, вы не должны ничего возвращать из своего конструктора - вы не сделали бы этого в Java или AFAIK. :-) – ninetwozero

1

Согласовано - метод, который вы используете старый метод школы PHP4 - вы должны использовать метод __construct(), как описано выше.

http://www.php.net/manual/en/language.oop5.decon.php

Эта страница объясняет построить() & разрушится() в PHP 5

+0

сначала у меня есть __construct() {}, но я обнаружил, что php 5 и старше могут использовать эту систему, поэтому я попробовал ее в надежде, что это была моя проблема. – Parsalin

0
// constructor 
function __construct() { 
ManageUsers(); 
} 


function ManageUsers(){ 
    $db_connection = new dbConnection(); 
    $this->link = $db_connection->connect(); 
    $constructed = 'Construct'; 
} 

Вы не можете вернуться из конструктора Тхо, может быть, вы хотите сделать ссылку на общественную собственность и доступ к нему прямо так

$user = new ManageUsers(); 
$link = $user->$link; 
Смежные вопросы