php: oop проблемы. скорее всего очень простой - PullRequest
1 голос
/ 28 апреля 2011

Эй, я читал учебное пособие и пытался упростить его до моих потребностей. Я не могу заставить что-либо работать ... если не уверены, некоторые советы по отладке были бы хороши!

Вот файл 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>

Я действительно не могу ничего сгенерировать с помощью этого метода. Таблица / данные есть, и я могу отображать их в процедурном порядке ... однако я пытаюсь разобраться в этом. Зная меня, это, наверное, очень глупая синтаксическая ошибка. Большое спасибо!

Ответы [ 4 ]

4 голосов
/ 28 апреля 2011

Вы не используете новое ключевое слово, а затем пытаетесь выполнить итерацию в $ blog, который является объектом.Вам нужно вызвать метод объекта queryPosts и выполнить итерации по его результатам.

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

foreach ($posts as $post) {
...
1 голос
/ 28 апреля 2011

Вы должны создать экземпляр Generate с new:

$blog = new Generate;

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

}
0 голосов
/ 03 мая 2011

Как вы, возможно, уже знаете, ответ @ David решает проблему довольно хорошо, однако, поскольку вы сказали, что следовали учебному пособию, я хочу дать вам некоторые рекомендации, чтобы вы не пошли по темному пути PHP.

  • Вы должны рассмотреть возможность размещения разных классов в разных файлах
  • Наличие класса для непосредственного подключения к базе данных не очень хорошо, попробуйте подключиться к базе данных по методу queryPosts, а не в файле index.php
  • Для начинающих политиков, использование подобного доступа к данным поможет вам обойти эту проблему, но если вы начнете работать с более профессионально ориентированными приложениями, рассмотрите возможность использования платформы ORM для доступа к данным, например Propel или доктрина

Надеюсь, я смогу помочь!

0 голосов
/ 28 апреля 2011

Еще одна вещь, почему вы ставите "до и после переменной. Это должно быть: mysql_connect ($ set_host, $ set_username, $ set_password) или die ("...");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...