0

我有一个名为numDisplay包含几个方法的类。这些方法中的大多数都需要使用另一个类中的方法,该方法prefs在其职责过程中包含在另一个文件中。

我想我可以包含该文件,实例化该类prefs,然后从需要它的每个方法内部单独访问该方法,但是,我希望有更好的方法吗?

我想在 of 中做文件并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 回答