Bonjour, je désire faire un lecteur de flux RSS en utilisant la POO.
Voila comment j'organise mon lecteur :
un objet FeedReader : il possède une liste de flux, il a la capacité d'en ajouter, et surtout de les afficher.
un objet Feed : il représente le flux. Il étend de DOMDocument. il est une liste d'item qu'il doit être capable de ranger dans un ordre quelconque. Il connaît aussi
un objet FeedItem : il représente un item du flux. Il étend de DOMNode. Il connait les données de l'information.
Lorsque je crée ma liste de FeedItem, dans l'objet Feed, j'utilise getElementsByTagName(). Celui-ci me renvoie une DOMNodeListe qui ne contient que des DOMNode, et pas des FeedItem.
Il me faudrait donc que cette fonction me renvoie des feedItem.
Voici mes objets (la plupart des fonctions ne sont pas encore implémentées):
FeedReader
<?php
class FeedReader {
const FULL_MODE=1;
const SHORT_MODE=2;
const DISPLAY_ALL=1;
/**
*
* @var SPLObjectStorage stockage des flux
*/
protected $feeds;
public function __construct(){
$this->feeds=new SplObjectStorage();
}
public function load($url){
$feed=new DOMDocument();
$feed->load($url);
$this->feeds->attach($feed, $url);
}
public function display($mode,$feed=null){
if(is_array($feed)){
}
else if($feed instanceof Feed && $this->feeds->offsetExists($feed)){
}
else if($feed == self::DISPLAY_ALL){
}
else{
throw new InvalidArgumentException('Mauvais argument donné à display : attendu DISPLAY_ALL, DISPLAY_FIRST, DISPLAY_LAST, Feed ou array '
. print_r($feed,true));
}
}
}
Feed
<?php
class Feed extends DOMDocument{
/**
*
* @var DOMNodeList
*/
protected $liste;
const ASC_SORT_MODE=1;
const DESC_SORT_MODE=2;
public function getElementsByTagName($name) {
}
public function sort($mode=self::DESC_SORT_MODE){
}
}
FeedItem
<?php
class FeedItem extends DOMNode implements ArrayAccess{
/**
*
* @return DateTime la date du flux
*/
public function getDate(){
}
public function getAutor(){
}
public function getContent(){
}
public function getDescription(){
}
public function offsetExists($offset) {
return is_callable(array($this, 'get'.ucfirst($offset)));
}
public function offsetGet($offset) {
}
public function offsetSet($offset, $value) {
}
public function offsetUnset($offset) {
throw new RuntimeException('Impossible de supprimer un attribut');
}
}
peut être puis-je faire autrement sinon?
Bonjour, je désire faire un lecteur de flux RSS en utilisant la POO.
Voila comment j'organise mon lecteur :
un objet FeedReader : il possède une liste de flux, il a la capacité d'en ajouter, et surtout de les afficher.
un objet Feed : il représente le flux. Il étend de DOMDocument. il est une liste d'item qu'il doit être capable de ranger dans un ordre quelconque. Il connaît aussi
un objet FeedItem : il représente un item du flux. Il étend de DOMNode. Il connait les données de l'information.
Lorsque je crée ma liste de FeedItem, dans l'objet Feed, j'utilise getElementsByTagName(). Celui-ci me renvoie une DOMNodeListe qui ne contient que des DOMNode, et pas des FeedItem.
Il me faudrait donc que cette fonction me renvoie des feedItem.
Voici mes objets (la plupart des fonctions ne sont pas encore implémentées):
FeedReader
[php]
<?php
class FeedReader {
const FULL_MODE=1;
const SHORT_MODE=2;
const DISPLAY_ALL=1;
/**
*
* @var SPLObjectStorage stockage des flux
*/
protected $feeds;
public function __construct(){
$this->feeds=new SplObjectStorage();
}
public function load($url){
$feed=new DOMDocument();
$feed->load($url);
$this->feeds->attach($feed, $url);
}
public function display($mode,$feed=null){
if(is_array($feed)){
}
else if($feed instanceof Feed && $this->feeds->offsetExists($feed)){
}
else if($feed == self::DISPLAY_ALL){
}
else{
throw new InvalidArgumentException('Mauvais argument donné à display : attendu DISPLAY_ALL, DISPLAY_FIRST, DISPLAY_LAST, Feed ou array '
. print_r($feed,true));
}
}
}
[/php]
Feed
[php]
<?php
class Feed extends DOMDocument{
/**
*
* @var DOMNodeList
*/
protected $liste;
const ASC_SORT_MODE=1;
const DESC_SORT_MODE=2;
public function getElementsByTagName($name) {
}
public function sort($mode=self::DESC_SORT_MODE){
}
}[/php]
FeedItem
[php]<?php
class FeedItem extends DOMNode implements ArrayAccess{
/**
*
* @return DateTime la date du flux
*/
public function getDate(){
}
public function getAutor(){
}
public function getContent(){
}
public function getDescription(){
}
public function offsetExists($offset) {
return is_callable(array($this, 'get'.ucfirst($offset)));
}
public function offsetGet($offset) {
}
public function offsetSet($offset, $value) {
}
public function offsetUnset($offset) {
throw new RuntimeException('Impossible de supprimer un attribut');
}
}
[/php]
peut être puis-je faire autrement sinon?