#php #mysql #oop
#php #mysql #ооп
Вопрос:
Привет, я следовал руководству и пытался упростить его для своих нужд. Я не могу заставить что-либо работать .. если не уверен, было бы здорово воспользоваться некоторыми советами по отладке!
Вот 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>
Я действительно не могу заставить что-либо генерировать с помощью этого метода. Таблица / данные есть, и я могу отобразить их процедурным образом.. однако я пытаюсь разобраться в методах ооп для этого. Зная меня, это, вероятно, действительно глупая синтаксическая ошибка. Большое спасибо!
Комментарии:
1. возвращает ли он результат запроса к базе данных
Ответ №1:
Вы не используете ключевое слово new, а затем пытаетесь выполнить итерацию по $blog, который является объектом. Вам нужно вызвать метод объекта queryPosts и выполнить итерацию по его результатам.
...
$blog = new Generate();
$posts = $blog->queryPosts();
foreach ($posts as $post) {
...
Ответ №2:
Вы должны создавать экземпляр Generate с new
:
$blog = new Generate;
foreach($blog->queryPosts() as $postArray){
}
Ответ №3:
Еще одна вещь, почему вы ставите «до и после переменной. Это должно быть: mysql_connect($set_host, $set_username, $set_password) или die(«…»);
Ответ №4:
Как вы, возможно, уже знаете, ответ @David’s довольно хорошо решает проблему, однако, поскольку вы сказали, что следуете руководству, я хочу дать вам несколько рекомендаций, чтобы вы не пошли по темному пути PHP.
- Вам следует рассмотреть возможность размещения разных классов в разных файлах
- Наличие класса для прямого подключения к базе данных не так уж хорошо, попробуйте подключиться к базе данных с помощью
queryPosts
метода, а не в index.php файл - Для начальных целей реализация доступа к данным, подобная этой, поможет вам обойти проблему, но если вы начнете работать над более профессионально ориентированными приложениями, рассмотрите возможность использования ORM-фреймворка для доступа к данным, такого как Propel или Doctrine
Надеюсь, я смогу помочь!