1

我是 OOP 的新手,并试图定义一组可以在类的方法中访问的公共准备好的 SQL 查询。到目前为止,我发现,类的其他公共变量不能插入到另一个公共变量中。我完全愿意以任何其他方式做到这一点。下面是我要使用的代码:

class baseQuery
{
    public static $ignoreAccounts = "(1, 2, 3, 4)";
    public $preparedQuery = "SELECT COUNT(?) FROM ? WHERE removed != 1 AND accountid NOT IN static::$ignoreaccounts AND ? BETWEEN $dateAfter AND $dateBefore";

但我收到 Parse 错误:语法错误,意外的 '"'

4

1 回答 1

2

我会进一步抽象它。创建获取您尝试获取的数据的公共方法,而不是包含一般 sql 语句的公共方法。

所以也许是一种retrieveAccounts方法。这需要忽略一系列帐户。

在该方法中,您可以添加忽略的帐户。

抱歉,澄清一下,您当前的设置不一定提供 OOP 的所有优点(我下面的示例也没有,但希望它可以帮助您找到方向)

也许您的应用程序可以受益于AccountManager

class AccountManager {
  public $retrieveAccounts($startDate, $endDate, $ignoredAccounts = array()) {
    return "SELECT COUNT(?) FROM ? WHERE removed != 1 AND accountid NOT IN $ignoreaccounts AND ? BETWEEN $dateAfter AND $dateBefore";

  }

$am = new AccountManager();
$accounts = $am->retrieveAccounts($startDate, $endDate);

也许您的 AccountManager 类也应该有一个addAcount方法?我不知道。我相信最好的做法是考虑到你的课程有一个“消费者”,即使那个人是你。消费者不需要知道您是如何获取帐户信息的。他们只需要能够做到。就像我说的那样,这也不一定是这样做的方法,而是更强大的抽象。

因此,根据我上面的建议,如果由于某种原因您想从文件、postgres 或 mongodb 中提取帐号,该怎么办。您可以使用此类构建一个程序,如果您需要更改从哪里获取帐户,请在 AccountManager 中进行,并且您的程序根本不需要更改。

于 2012-05-15T15:08:20.393 回答