我有一个Chat.php文件,其中包含与查询相关的所有内容。然后有一个Core.php包含与数据库的连接和Chat.php中使用的基本函数,如" query"和"行"它处理"查询"进入阵列。
在Chat.php中有两个功能,第二个是在使用print_r时打印第一个内容($ this-> rows());. checkForLastMessage()应检查一个表,以查看是否有新消息要从具有函数getNewMessages()的另一个表中提取。
这是它的样子: core.php中
<?php
class Core
{
...
public function query($sql)
{
$this->result = $this->db->query($sql);
}
public function rows()
{
for($x = 1; $x <= $this->db->affected_rows; $x++)
{
$this->rows[] = $this->result->fetch_assoc();
}
return $this->rows;
}
}
Chat.php
<?php
class Chat extends Core
{
public function checkForLatestMessage($chatid, $iam)
{
$userinchat='for'.$iam;
$this->query("SELECT anonchat.$userinchat FROM anonchat WHERE anonchat.chatid=$chatid");
$printarray = Array();
$printaray = '';
foreach( $this->rows() as $id )
{
$printarray[] = $id[$userinchat];
}
if($printarray[0] != '')
{
$this->getNewMessages($chatid, $printarray[0]);
}
}
public function getNewMessages($chatid, $requiredMessages)
{
$this->query("SELECT anonmessage.content, anonmessage.timeposted FROM anonmessage WHERE anonmessage.messageid IN ($requiredMessages) ORDER BY anonmessage.timeposted ASC");
print_r($this->rows());
}
最后一个print_r包含上一个函数的元素。我不知道为什么会这样。
编辑。这是输出:
数组([0] =&gt;数组([for1] =&gt; 2,4,6)[1] =&gt;数组([content] =&gt; 消息2 [timeposted] =&gt; 2017-08-04 16:12:34)[2] =&gt;阵列( [content] =&gt;消息4 [timeposted] =&gt; 2017-08-04 16:12:48)[3] =&gt; 数组([content] =&gt;消息6 [timeposted] =&gt; 2017-08-04 16:13:03))
数组的元素[0](&#34; for1&#34;的元素)保留在上一个函数中。
答案 0 :(得分:0)
要回答您的问题,您要在第一个方法中初始化类属性$ this-&gt;行,然后将第二个方法附加到它。在添加之前,您需要重置$ this-&gt;行。
public function getNewMessages($chatid, $requiredMessages)
{
$this->rows = null;
$this->query("SELECT anonmessage...");
print_r($this->rows());
}
或者更好的是,重置 query()方法中的变量。这样你每次都不必这样做。
当我说这是一个糟糕的设计时,请不要冒犯。
考虑现在保持简单,让每个方法处理自己的查询和数据库交互。专注于DRY,封装等主要概念,让您的课程专注于自己的责任。
实施例。 checkForLatestMessage()这应该做什么?听起来应该检查消息然后返回一个布尔值(true | false),而是调用getNewMessages()来输出一些数据。
我对你的应用程序的了解不足以真正提出一些有用的东西,但这比你要走的道路要好一些。请注意,我们不会继承Core,因此您可以自由地继承其他内容。这些方法简明扼要,尽他们所能。您可能也会以这种方式保存几行代码,并且更容易阅读。
<?php
class Chat
{
public function hasNewMessages($chatid, $iam)
{
// Query using PDO properly
return (bool)$hasNewMessages;
}
public function getNewMessages($chatid, $requiredMessages)
{
// Query using PDO properly
// An array of data or objects
return $messages;
}
}
/******** Client Code ***********/
$chat = new Chat();
if ($chat->hasNewMessages()) {
foreach ($chat->getNewMessages($id, $required) as $message) {
// $message
}
}
我的一些想法......祝你好运。