gpt4 book ai didi

PHP - 两个类,正确地相互交谈

转载 作者:行者123 更新时间:2023-12-04 05:08:04 25 4
gpt4 key购买 nike

我有一个小问题。我试过搜索,但我无法完全正确地找到搜索词,希望有人能提供帮助。

我的系统中的每个页面都有一个包含,其工作方式如下:

<?PHP
require_once("class.system.php");
require_once("class.mysql.php");

$oMySQL = new MySQL();
$oSystem = new SystemClass();

... ?>

但我有一个问题。你可能猜到了——MySQL 类是我用来简化 MySQL 调用的一堆函数。这不是我想使用它的唯一例子,但它是一个很好的例子。

我在系统类中有函数,我希望能够引用 MySQL 类(反之亦然......)。

例如,我在系统类中有一个函数,它将使用来自 MySQL 的数据填充 session 变量。我能想到的唯一方法(我知道这是错误的......)是:
class SystemClass {

function PopulateSession(){
global $oMySQL;
if($oMySQL->Select('abc')){
$_SESSION['def']= blahblahblah;
return true;
} else {
return false;
}
}
}

它有效,但这意味着我想使用它的每个功能,我必须使用全局,我敢肯定这是非常糟糕的做法。有人可以建议吗?

谢谢

最佳答案

你遇到的叫做组合。一个好的解决方案是使用 dependency injection框架。一个简单的解决方案是使用构造函数参数滚动。

public class A { 
private $b;
public function __construct($b) {
$this->b = $b;
}
}

$b = new B;
$a = new A($b);

或者,作为一种更灵活的解决方案,当您具有相互依赖关系时:
public class A {
private $b;
public function setB($b) {
$this->b = $b;
}
}

public class B {
private $a;
public function setA($a) {
$this->a = $a;
}
}

$a = new A;
$b = new B;
$a->setB($b);
$b->setA($a);

但缺点是随着依赖项数量的增加,很难管理和记住设置所有依赖项。这正是依赖注入(inject)框架流行的原因。

关于PHP - 两个类,正确地相互交谈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253601/

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