2016-08-22 42 views
0

我搜索並閱讀了有關私人,公共&受保護的課程,我可能只是不知道如何說出我想要做的事情。使用php類中的變量

我無法獲得類函數來使用定義爲public的變量。

這裏是我的類:

class Store { 

    private $wpdb; 
    public $store; 

    public $payroll_total_dollars; 
    public $payroll_regular_dollars; 
    public $payroll_overtime_dollars; 
    public $payroll_vacation_dollars; 
    public $payroll_salary_dollars; 
    public $payroll_commission_dollars; 
    public $payroll_total_percent; 
    public $the_last_query; 

    public function __construct() { 
    global $wpdb; 
    $this->wpdb = &$wpdb; 
    $this->setup_payroll(); 
    } 

    public function set_store($store) { 
    $this->store = $store; 
    } 

    function setup_payroll() { 
     if($this->store != 'all_stores') { 
      $this->payroll_regular_dollars = $this->wpdb->get_var($this->wpdb->prepare ("SELECT sum(regular_hourly) FROM adt_sales WHERE store= '%d'", $this->store)); 
      $this->the_last_query = $this->wpdb->last_query; 
     } 
    } 
} 

$store01 = new Store; 
$store01->set_store('1'); 

我想一些事情得到查詢在setup_payroll()功能工作。

如果我這樣做:echo $store01->store,它返回string(1) "1"

如果我這樣做:echo $store01->the_last_query,它返回string(58) "SELECT sum(regular_hourly) FROM adt_sales WHERE store= '0'"

所以很明顯,因爲查詢被接收0它實際上應該是1,其結果是NULL

如果我硬編碼數1到在setup_payroll()功能查詢,它按預期工作,並返回我要找的$payroll_regular_dollars變量中的值,所以我不知道在哪裏,我在去錯了試圖讓$this->store進入該查詢!

請幫助保存我的理智!

+1

查詢執行_before_你設置商店,這就是爲什麼。 – tkausl

+0

就像@tkausl所說的,在設置商店之前,您的查詢會在構造函數中被預先調用。在實例化後設置商店不會更改查詢的結果,因爲它已經運行。 –

回答

0

當您創建$ store01時,調用構造函數中的代碼。你不能在構造函數之前執行代碼;如果你想調用set_store,你需要在構造函數中完成,以便setup_payroll具有要引用的那個數字。 (或者你可以在你的構造函數之外調用setup_payroll())。

你可以改變你的構造函數,像這樣:

public function __construct($v) { 
    global $wpdb; 
    $this->set_store($v); 
    $this->wpdb = &$wpdb; 
    $this->setup_payroll(); 
} 

然後只需用

$store01 = new Store(1); 

此實例將set_store任何你傳入構造時,一個新的對象實例化。有了這個,setup_payroll應該更像你期望的。

+0

完美謝謝!這是我第一次去OOP,到目前爲止,把所有這些線都寫下來真是太棒了! – drumichael611