如何解决方法更改和重复使用同一类
| 我有以下课程: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 举报,一经查实,本站将立刻删除。