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";

しかし、解析エラーが発生します:構文エラー、予期しない'"'

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 に答える