0

numDisplayいくつかのメソッドを含むクラスがあります。これらのメソッドのほとんどはprefs、職務の過程で別のファイルに含まれている、呼び出された別のクラスのメソッドを使用する必要があります。

ファイルを含めてクラスをインスタンス化し、必要な各メソッド内からメソッドに個別にアクセスできると思いますprefsが、もっと良い方法があると思いますか?

のファイルを実行し、そこでクラスをインスタンス化することも考えましrequire_onceた。その後、のメソッドから呼び出すことができます。__constructornumDisplaynumDisplay

以下のコードとさまざまな構文のバリエーションを試しましたが、動作しません。どうすればいいですか?

class numDisplay {

    private $P;

    function __construct($P) {

        require_once($_SERVER['DOCUMENT_ROOT'].'/includes/classes/preferences.php');
        $P = new Preferences();

    }

    public function displayBSNo($num, $invType) {

        $auto_bs_no     = $this->$P->getPreference('auto_bs_no');
        $length_bs_no       = $this->$P->getPreference('length_bs_no');
        $length_alt_bs_no   = $this->$P->getPreference('length_alt_bs_no');

        if ($invType == 1) { // It's a standard BS

            if ($auto_bs_no == '1') {

                return "BS-" . $this->pad($num, $length_bs_no);

            } else {

                if ($num == '') {
                    return '<i>none</i>';
                } else {
                    return $num;
                }
            }

        }

        elseif ($invType == 2) {
            return "PI-" . $this->pad($num, $length_alt_bs_no);
        }
    }

}

displayBSNo() を使用しようとすると、次のエラーが発生します。

Fatal error: Call to a member function getPreference() on a non-object in /home/peter/Documents/websites/Our_websites/bookkeeper.ph/books.bookkeeper.ph/public/includes/classes/common.classes.php on line 347
4

2 に答える 2

2

それ以外の

$this->$P->getPreference('')

使用する

$this->P->getPreference('')
于 2013-03-22T14:18:57.230 に答える
1

コンストラクターでプロパティを設定していません:

function __construct($P) {
    require_once($_SERVER['DOCUMENT_ROOT'].'/includes/classes/preferences.php');
    $P = new Preferences();
}

ここで$Pは、コンストラクターのスコープ内の単なるローカル変数です。プロパティ内に値を格納するには、次のPものが必要です。

    $this->P = new Preferences();

コードの残りの部分で:

$this->$P->getPreference(...)

名前が に保持されているプロパティを参照しますが$P、これはおそらく必要なものではありません。そのはず:

$this->P->getPreference(...)

PHP は実際に、この種の間違いを犯したときに通知を出します。これでそれらを見ることができます:

error_reporting(-1);
ini_set('display_errors', 'On');

これらの設定は、開発時にのみ使用してください。

于 2013-03-22T14:26:26.027 に答える