gpt4 book ai didi

PHP如何使2个类从每个类访问方法

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:59 24 4
gpt4 key购买 nike

我有一个简单的 php 代码,我想将它拆分为模型、 View 、助手。模型应该访问辅助类的一些方法,辅助类应该访问模型类的一些方法。

我不确定下面的模式是否正确。我想这不是因为在这个例子中 model,view,helper 会被初始化多次。哪种方法最简单,可以像我尝试使用以下代码那样完成某些任务?

lib/main.php

require_once('lib/model.php');
require_once('lib/helper.php');
require_once('lib/view.php');

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'show';
switch($action){
case "show":
$class->showAction();
break;
case "another":
$class->anotherAction();
break;
}
class main extends abstract{
public function showAction(){
if($this->helper->getParam('browse')){
//something
}else{
$profiles= $this->model->getProfiles();
}
echo $this->view->toHtml($profiles);
}
}

lib/abstract.php

class abstract{
public function __construct(){
$this->model = new model();
$this->view = new view();
$this->helper = new helper();
}
}

lib/模型.php

class model extends abstract{
public function getProfiles(){
if($this->helper->someMethod(){
//some code
}
//some code
return $profiles;
}
}

lib/helper.php

class helper extends abstract{
public function someHelperMethod(){
if($this->model->someAnotherMethod(){
//some code
}
//some code
return $profiles;
}
}

最佳答案

第一个问题是您像俄罗斯套娃一样嵌套类。您不应该让您的抽象类既包含模型/ View /助手,又是模型/ View /助手的父级

我会警告不要仅仅为了确保类在范围内而使用扩展。

通常您可以这样想:当您的类与其父类具有共享行为或属性时使用扩展它要么需要额外的功能,要么需要修改现有功能。

您定义的“抽象”类在 Model/View/Helper 之间不共享任何属性或方法,因此 Model/View/Helper 不应该从它扩展。

但是,如果您想要一个包含每个类类型实例的“容器”类,只需将其设为独立类,不要扩展它,例如:

class Container{
public $model;
public $view;
public $helper;

public function __construct(){
$this->model = new model();
$this->view = new view();
$this->helper = new helper();
}

public function showAction(){
if($this->helper->getParam('browse')){
//something
}else{
$profiles= $this->model->getProfiles();
}
echo $this->view->toHtml($profiles);
}

然后只在开始的某个地方实例化它一次:

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'show';
$class = new Container();

然后,如果您想在 Helper 中调用模型中的某些内容,可以通过多种方式完成。

一个选项,传递对此类的引用并将其保存在 Helper 中:

// Inside Container
public function __construct(){
$this->model = new model();
$this->view = new view();
$this->helper = new helper($model);
}

Helper 类看起来像:

class Helper{
protected $model;

public function __construct($model){
$this->model = $model;
}

public function someHelperMethod(){
if($this->model->someAnotherMethod()){
//some code
}
//some code
return $profiles;
}
}

关于PHP如何使2个类从每个类访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32339844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com