php:oop问题。可能非常基本

时间:2011-04-28 03:57:04

标签: php mysql oop

嘿,我正在通过一个教程,并试图根据我的需要简化它。我无法得到任何工作......如果不确定,一些调试技巧会很棒!

这是class.php文件:

class MySQL{

  public static function connect($set_host, $set_username, $set_password, $set_database){

    mysql_connect("$set_host", "$set_username", "$set_password")or die("cannot connect");
    mysql_select_db("$set_database")or die("cannot select DB");

  }
}

class Posts {  

  public $id;  
  public $title;   

  function __construct($_id, $_title){  

    $this->id = $_id;  
    $this->title = $_title;

  }
}


class Generate {

  function queryPosts(){
    $query = mysql_query("SELECT * FROM posts ORDER BY id DESC");

    $postArray = array();  
    while ($row = mysql_fetch_assoc($query)){  

      $posts = new Posts($row["id"], $row['title']);  
      array_push($postArray, $posts);

    }     
    return $postArray;  
  }  
}

这是索引:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>dev</title>
</head>

<body>

<?php  
include ("class.php");  

MySQL::connect('localhost', 'test', 'pass', 'table');  

$blog = Generate();

foreach ($blog as $post)  
{  
    echo $post->title . "<br/>";  
}  
?> 

</body>
</html>

我真的无法用这种方法生成任何东西。表/数据在那里,我可以以程序的方式显示它们。但是我试图进入oop方法这样做。知道我这可能是一个非常愚蠢的语法错误。非常感谢!

4 个答案:

答案 0 :(得分:4)

你没有使用new关键字,然后你试图迭代$ blog这是一个对象。您需要调用对象的方法queryPosts,并迭代它的结果。

...
$blog = new Generate();
$posts = $blog->queryPosts();

foreach ($posts as $post) {
...

答案 1 :(得分:1)

您应该使用new实例化生成:

$blog = new Generate;

foreach($blog->queryPosts() as $postArray){

}

答案 2 :(得分:0)

另一个原因是你为什么要把变量放在变量之前和之后。它应该是: mysql_connect($ set_host,$ set_username,$ set_password)或die(“...”);

答案 3 :(得分:0)

正如你可能已经知道的那样,@ David的答案很好地解决了这个问题,但是,因为你说你正在学习一个教程,所以我想给你一些推荐,这样你就不会深入到PHP的黑暗道路。

  • 您应该考虑将不同的类放在不同的文件中
  • 让一个类直接连接到数据库并不是那么好,尝试使用queryPosts方法而不是index.php文件连接数据库
  • 对于启动purpouses,实现这样的数据访问将解决您的问题,但如果您开始研究更专业的应用程序,请考虑使用ORM框架进行数据访问,例如Propel或{{3} }

希望我能帮忙!