我有一个名为numDisplay
的类,其中包含多个方法。大多数这些方法需要使用另一个名为prefs
的类中的方法,该方法在其职责过程中包含在另一个文件中。
我想我可以包含该文件,实例化类prefs
,然后从需要它的每个方法中单独访问该方法,但是,我希望有更好的方法吗?
我想在require_once
的{{1}}中执行文件__constructor
并在那里实例化类,然后我可以从numDisplay
的方法中调用它。
我尝试了下面的代码和各种语法变体,但无法让它工作。我该怎么办呢?
numDisplay
当我尝试使用displayBSNo()时,出现以下错误:
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);
}
}
}
答案 0 :(得分:2)
而不是
$this->$P->getPreference('')
使用
$this->P->getPreference('')
答案 1 :(得分: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');
仅在开发期间使用这些设置。