嘿,我正在通过一个教程,并试图根据我的需要简化它。我无法得到任何工作......如果不确定,一些调试技巧会很棒!
这是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方法这样做。知道我这可能是一个非常愚蠢的语法错误。非常感谢!
答案 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文件连接数据库希望我能帮忙!