【问题标题】:using a variable within a php class在 php 类中使用变量
【发布时间】: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 所说,在您设置商店之前,您的查询会在构造函数中被预先调用。在实例化之后设置存储不会改变查询的结果,因为它已经运行了。

标签: php wordpress class


【解决方案1】:

当您创建 $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 的行为应该更符合您的预期。

【讨论】:

  • 非常感谢!这是我在 OOP 的第一次围棋,到目前为止,只写一次所有这些行真是太棒了!
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2017-02-08
  • 2013-06-11
  • 2020-02-01
  • 2014-12-25
  • 1970-01-01
相关资源
最近更新 更多