微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

方法更改和重复使用同一类

如何解决方法更改和重复使用同一类

| 我有以下课程:
class DB {

    private $name;

    public function load($name) {
        $this->name = $name;
        return $this;
    }

    public function get() {
        return $this->name;
    }
}
目前,如果我这样做:
$db = new DB();
echo $db->load(\'foo\')->get() . \"<br>\";
echo $db->load(\'fum\')->get() . \"<br>\";
这将输出\“ foo \”然后是\“ fum \”。 但是,如果我这样做:
$db = new DB(); 
$foo = $db->load(\'foo\');
$fum = $db->load(\'fum\');
echo $foo->get() . \"<br>\";
echo $fum->get() . \"<br>\";
它始终输出\“ fum \\”。 我可以看到为什么会这样做,但是如何在不必创建新的DB实例的情况下将变量与每个实例分开呢?     

解决方法

        如果您要让DB成为某种数据库连接对象(我想是的),那么多个实例可能不是最佳选择。也许这样的事情可能是您正在尝试做的事情:
$db = new DB(); 
$foo = $db->load(\'foo\')->get();
$fum = $db->load(\'fum\')->get();
echo $foo . \"<br>\";
echo $fum . \"<br>\";
如果我认为您尝试做的是正确的,最好将get逻辑从DB类分离到自己的Record类中。
class Record {
    function __construct($name) {
        $this->name = $name;
    }

    function get(){
        return $this->name;
    }

    private $name;
}

class DB {

    public function load($name) {
        return new Record($name);
    }
}

$db = new DB(); 
$foo = $db->load(\'foo\');
$fum = $db->load(\'fum\');
echo $foo->get() . \"<br>\";
echo $fum->get() . \"<br>\";
    ,        为了使它与每个实例分离,根据定义,您需要创建一个新实例...尽管可以使用
load()
方法进行操作。除了返回
$this
,您还可以返回配置为所需方式的
new DB()
。然后将方法设为静态。 这就是所谓的工厂模式。     ,        您在代码中遇到的内容类似于PHP的按引用传递功能。 设置第一个变量时,
$foo
等于
$db->name
的值,再次调用以将其设置为'fum \'时,您将
$fum
设置为等于
$db->name
。由于最后都回显了它们,因此它们都将是您为其设置的最后一个值。 试试看,看看你的结果是否不同。
$db = new DB(); 

$foo = $db->load(\'foo\');
echo $foo->get() . \"<br>\";

$fum = $db->load(\'fum\');
echo $fum->get() . \"<br>\";
运行
$db->load()
时,创建一个新对象并返回该对象,而不是您当前所在的对象。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。