2009-10-15 83 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; 
    } 

初始化類用戶後,當我嘗試回聲$用戶>名稱我沒有得到預期的結果。

請注意我上面已經聲明var $ name;用戶

+0

首先,不推薦使用'var'。 – slikts 2009-10-15 16:17:00

回答

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

does not work,tried it :( – Shishant 2009-10-15 16:22:10

+0

嘗試添加我在代碼中得到的調試 – Lizard 2009-10-15 16:26:46

+0

您是否錯過構造函數? – Lizard 2009-10-15 16:31:12

0

我非常抱歉,我想通了,問題是我的一部分,我用餅乾,並兩個cookie設置哪些們給問題:(

3

我敢用幾件事情我在這裏看到

  1. 方法名name()是,以什麼方法是應該做的非常沉默寡言而言記住,方法是行動 - 嘗試以他們的名義給他們某種動詞。
  2. 當您應該使用aggregation or composition時,在一個班級中使用global(或甚至使用global期間)。
  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();