【发布时间】:2016-12-29 10:19:37
【问题描述】:
我在一个类中搜索并阅读了关于私有、公共和受保护的信息,但我可能只是不知道如何表达我正在尝试做的事情。
我无法让类函数使用定义为公共的变量。
这是我的课:
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 进入该查询时出错了!
请帮助拯救我的理智!
【问题讨论】:
-
查询在您设置商店之前执行,这就是原因。
-
就像@tkausl 所说,在您设置商店之前,您的查询会在构造函数中被预先调用。在实例化之后设置存储不会改变查询的结果,因为它已经运行了。