Php 如何从构造函数返回值,并将值传递给另一个用户定义函数
我有一个构造函数 返回$load\u template\u id; //包含我要在以下代码中使用的值 下面我正在检查会话是否已设置,否则请执行else部分Php 如何从构造函数返回值,并将值传递给另一个用户定义函数,php,Php,我有一个构造函数 返回$load\u template\u id; //包含我要在以下代码中使用的值 下面我正在检查会话是否已设置,否则请执行else部分 if(!isset($_SESSION['cms_id'])) { $loadTemplateId = MxpCms_Admin::__construct(); $MxpBoxesSelected = $MxpCms->getSelectedLayout($loadTemplateId);
if(!isset($_SESSION['cms_id']))
{
$loadTemplateId = MxpCms_Admin::__construct();
$MxpBoxesSelected = $MxpCms->getSelectedLayout($loadTemplateId);
$MxpIdSelected = $MxpCms->getSelectedLayoutId($loadTemplateId);
}
else
{
$MxpBoxesSelected = $MxpCms->getSelectedLayout($_SESSION['cms_id']);
$MxpIdSelected = $MxpCms->getSelectedLayoutId($_SESSION['cms_id']);
}
但我犯了致命的错误
致命错误:无法静态调用非静态方法MxpCms_Admin::_构造()
我对如何返回值感到困惑
class MxpCms_Admin {
protected $load_template_id;
public function __construct()
{
global $MxpDatabase;
$Qcmsdrag = $MxpDatabase->query('select t.id from :table_templates t, :table_configuration c where t.code = c.configuration_value');
$Qcmsdrag->bindTable(':table_templates', TABLE_TEMPLATES);
$Qcmsdrag->bindTable(':table_configuration', TABLE_CONFIGURATION);
$Qcmsdrag->bindValue(':boxes_group', 'left');
$Qcmsdrag->execute();
$this->load_template_id = $Qcmsdrag->value('id');
//error_log(print_r($Qcmsdrag,TRUE));
}
public function getId(){
return $this->load_template_id;
}
}
那么
$Admin = new MxpCms_Admin();
$loadTemplateId = $Admin->getId();
$Admin = new MxpCms_Admin($MxpDatabase);
$loadTemplateId = $Admin->getId();
或
取决于PHP的版本
或(甚至更好)
那么
$Admin = new MxpCms_Admin();
$loadTemplateId = $Admin->getId();
$Admin = new MxpCms_Admin($MxpDatabase);
$loadTemplateId = $Admin->getId();
或
这是类和构造函数的更恰当的用法。我认为在
MxpCms\u Admin::getTemplateId
中使用两个表
常量仍然不好,因为它依赖于全局环境而不是依赖项注入。你不能从构造函数返回值,那么我应该怎么做才能获得值?我知道默认情况下会自动调用它。将所有这些都写在另一个方法下并调用该方法。可能的重复项使用构造函数将load_template_id设置为类属性;并为该属性提供一个getter方法虽然这从技术上回答了这个问题,但它仍然是可怕的类设计…:)@deceze-现在只需做一点重构,从DI开始消除全局看起来我们最终得到了一个相同的返工:)只有这么多明智的方法可以做到这一点。。。或者我们都同样疯狂…:)
$Admin = new MxpCms_Admin($MxpDatabase);
$loadTemplateId = $Admin->getId();
$loadTemplateId = (new MxpCms_Admin($MxpDatabase))->getId();
class MxpCms_Admin {
protected $mxpDatabase;
public function __construct($mxpDatabase) {
$this->mxpDatabase = $mxpDatabase;
}
public function getTemplateId() {
$Qcmsdrag = $this->mxpDatabase->query('select t.id from :table_templates t, :table_configuration c where t.code = c.configuration_value');
$Qcmsdrag->bindTable(':table_templates', TABLE_TEMPLATES);
$Qcmsdrag->bindTable(':table_configuration', TABLE_CONFIGURATION);
$Qcmsdrag->bindValue(':boxes_group', 'left');
$Qcmsdrag->execute();
return $Qcmsdrag->value('id');
}
}
$admin = new MxpCms_Admin($mxpDatabase);
$templateId = $admin->getTemplateId();