2009-10-15 5 views
0

Я учащийся, у меня есть класс db, чтобы помочь мне подключиться и получить результаты в mySQL.Объектно-ориентированное программирование, доступ к значениям переменных, как?

$set = $db->get_row("SELECT * FROM users"); 
echo $set->name; 

таким образом я использую результаты эха вне класса.

Теперь я создал другое имя класса пользователя и имеет эту функцию

public function name() { 
      global $db; 
      $set = $db->get_row("SELECT * FROM users"); 
      $this->name = $set->name; 
    } 

после инициализации пользователя класса, когда я пытаюсь повторить $ user-> имя я не получаем ожидаемые результаты.

Примечание: Я указал выше var $ name; в классе пользователя

+0

С одной стороны, использование 'var' устарело. – slikts

ответ

1
class DB 
{ 
    public function get_row($q) 
    { 
     # do query and store in object 
     return $object; 
    } 
} 

class User 
{ 
    public $name; 

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

    public function name() { 
     global $db; 
     $set = $db->get_row("SELECT * FROM users"); 
     echo "<pre>".print_r($set)."</pre>"; # make sure $set is returning what you expected. 
     $this->name = $set->name; 
    } 
} 

$db = new DB(); 
$user = new User(); 
echo $user->name; 
+0

не работает, попробовал :( – Shishant

+0

Попробуйте добавить отладку, которую я получил в коде. – Lizard

+0

Вам не хватало конструктора? – Lizard

0

Я очень извиняюсь, я понял, что проблема была с моей стороны, я использовал печенье и было два печенья установить, какие были проблемы, дающие :(

3

Я м очень обеспокоены несколько вещей, которые я вижу здесь

  1. имя методы name() ужасно неразговорчивое, как к тому, что метод должен делать Помните, что методы действий. - попробовать чтобы дать им какой-то глагол в их имени.
  2. Использование global в классе (или даже использование globalпериод), когда вы должны использовать aggregation or composition.
  3. Вы не показывают примеры выполнения, но я могу только предположить, что вы фактически никогда не называйте User::name(), поэтому ваш тест не удается

Вот код, который решает эти проблемы.

<?php 

class DB 
{ 
    /* Your methods and stuff here */ 
} 

class User 
{ 
    protected $db; 
    protected $name; 

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

    public function getName() 
    { 
    if (is_null($this->name)) 
    { 
     $set = $this->db->get_row("SELECT * FROM users"); 
     $this->name = $set->name; 
    } 
    return $this->name; 
    } 
} 

$db = new DB(); 

$user = new User($db); 
echo $user->getName(); 
Смежные вопросы