【问题标题】:PHP Classes and instancesPHP 类和实例
【发布时间】:2016-11-16 15:29:50
【问题描述】:

我对 PHP 中的实例有疑问。我创建了一个基本上将查询发送到数据库的类。问题是每次我想执行查询时创建一个实例或者只是使用相同的实例来覆盖分配给该类的内存是正确的。 例如

//Select
$conversation = new mQuery();
$conversation->operation = "select";
$conversation->data = array("bla", "bla", "bla");
$result = $conversation->execute();

//Update
$conversation = new mQuery();
$conversation->operation = "update";
$conversation->data = array("bla", "bla", "bla");
$result = $conversation->execute();

对比

//Create instance ONCE
$conversation = new mQuery();

//Select
$conversation->operation = "select";
$conversation->data = array("bla", "bla", "bla");
$result = $conversation->execute();

//Update
$conversation->operation = "update";
$conversation->data = array("bla", "bla", "bla");
$result = $conversation->execute();

提前致谢。

【问题讨论】:

  • 通常我们为每个操作创建一个新对象,特别是如果对象只是为了那个。它还使代码更清晰,更容易理解。该语言应该为您处理垃圾收集
  • 这也取决于类的实现。如果您忘记调用 ->data 并且它会重复使用上一次运行的数据怎么办?
  • @FirstOne 这就是我怀疑的原因。也许最好每次都创建一个新实例来清理内存,这样如果有错误的变量它会失败而不是从之前的赋值中获取它。
  • 你几乎不需要担心这个问题。我怀疑你会运行这么多的查询,这会给你带来麻烦。 (不过,质疑是有效的)。
  • 你可以做的是,一旦你完成了对象,enable it to be destroyed。然后,只需在每次需要运行查询时创建一个新对象(问题的第一个选项)。

标签: php class memory instance


【解决方案1】:

似乎是 mQuery 的一个很好的可重用类,我建议选择第二个选项,因为该类和它的方法看起来像实用方法,并且前一个查询中没有任何重要的内容存储在实例中。

【讨论】:

  • "[...] 并且前一个查询中没有任何重要的内容存储在实例中。" 如果您考虑查询的类型并且它是数据 不是意义重大...(看看我在this comment 中的意思)
  • @FirstOne 从 OP 提供的结构来看,很明显他们知道调用数据并且它已经在 $result 中。此外,忘记一行代码可能发生在任何地方,并可能导致各种差异。那是不正确的代码,一个错误和选择一种方法而不是另一种方法并不总是让你安全。
  • 别担心,大声笑,我没有否决你的答案......我只是认为一个不起作用的代码比一个有效但可能产生unwated 结果(如使用以前的数据)。和平...
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 2011-12-31
  • 2012-04-11
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
相关资源
最近更新 更多