Probleem met PHP OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yannick

Yannick

28/11/2009 00:32:00
Quote Anchor link
Ik ben nu iets meer dan een jaar bezig met PHP en het gaat me goed af. Nu ben ik met OOP begonnen en ik ben bezig geweest met een RSS class. Heel basaal, maar gewoon omdat ik wil oefenen. Helaas zit ik met beperkte mogelijkkheden, namelijk PHP 4. Ik ben tegen een probleem opgelopen en ik weet niet of dit aan mijn code ligt of aan de beperktheid van OOP in PHP 4.

Hieronder de code en het spreekt denk ik voor zich. Mijn probleem is dat als ik een item wil toevoegen hij hem wel aan de $this->items binnen de methode toevoegd, maar niet aan de $this->items van de feed class. Waarschijnlijk is dit een redelijk vaag verhaal, maar ik ben nog niet helemaal thuis in de terminologie van OOP.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
class Feed
{
    var
$title;
    var
$link;
    var
$description;
    var
$language = "nl-NL";
    var
$pubDate;
    var
$self;
    var
$image;
    var
$items;
    var
$feed;

    function
Feed($title, $link, $description, $self)
    {

        $this->title = $title;
        $this->link = $link;
        $this->description = $description;
        $this->self = $self;
    }

    function
addImage($url)
    {

        $this->image = "<image>\n
                        <url>"
. $url . "</url>\n
                        <title>"
. $this->title . "</title>\n
                        <link>"
. $this->link . "</link>\n
                        </image>"
;
        return $this->image;
    }
    
    function
addItem($item)
    {

        $this->items .= $item;
    }

    function
serve()
    {

        $this->feed  = "<?xml version='1.0' encoding='ISO-8859-1'?>\n
                        <rss version='2.0' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:atom='http://www.w3.org/2005/Atom'>\n
                        <channel>\n
                        <title>"
. $this->title . "</title>\n
                        <link>"
. $this->link . "</link>\n
                        <description>"
. $this->description . "</description>\n
                        <language>"
. $this->language . "</language>\n
                        <atom:link href='"
.$this->self."' rel='self' type='application/rss+xml' />\n
                        "
. $this->image . $this->items . "
                        </channel>\n
                        </rss>"
;

        header("Content-type: application/xml");
        echo $this->feed;
    }
}


class Item
{
    var
$title;
    var
$link;
    var
$description;
    var
$pubDate;
    var
$guid;
    var
$item;
    function
Item($title, $link, $description, $pubDate, $guid)
    {

        $this->title = $title;
        $this->link = $link;
        $this->description = $description;
        $this->pubDate = $this->setPubDate($pubDate);
        $this->guid = $guid;
        if(empty($this->guid)) $this->guid = $this->link;
    }

    function
setPubDate($date)
    {

        if(strtotime($date) == false)
            $this->pubDate = date("D, d M Y H:i:s ", $date) . "+0100";
        else
            $this->pubDate = date("D, d M Y H:i:s ", strtotime($date)) . "+0100";
    }

    function
addItem($feed)
    {

        $this->item = "<item>\n<title>" . $this->title . "</title>\n<link>" . $this->link . "</link>\n<description>" . $this->description . "</description>\n<pubDate>" . $this->pubDate . "</pubDate>\n<guid>" . $this->guid . "</guid>\n</item>\n";
        $feed->addItem($this->item);
    }
}


?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
// SQL Query, die is goed.
    $feed = new Feed('v.v. Gendringen nieuws', 'http://www.vvgendringen.nl/index.php', 'Nieuwsfeed met al het nieuws binnen voetbalvereniging Gendringen.', 'http://www.vvgendringen.nl/rss.php');

    while($result = mysql_fetch_assoc($res))
    {

        $item = new Item($result['title'], 'http://www.vvgendringen.nl/nieuws/'.$result['id'].'/'. preg_replace("/[^a-z0-9]+/i", "-", strtolower($result['titel'])) . '.html', strip_tags(html_entity_decode($result['inleiding']), '<img><br><em><strong><span><a>'), $result['date'], null);
        $item->addItem($feed);
    }

    $feed->serve();
?>

Hopelijk kunnen jullie mij van dienst zijn.
Gewijzigd op 01/01/1970 01:00:00 door Yannick
 
PHP hulp

PHP hulp

22/12/2024 09:20:24
 
Gerben Jacobs

Gerben Jacobs

28/11/2009 01:49:00
Quote Anchor link
Het is niet echt logisch dat je tegen een item zegt dat ie zichzelf aan een feed moet toevoegen.
Is logischer als je een item aan een feed toevoegt. Maar ik neem aan dat je dit niet zelf geschreven hebt.

Ik zie zo op het eerste gezicht niks verkeerd..


Edit: Okay, twee mogelijke verdachten.

1. Je doet ergens $result["title"] en op een andere plek $result["titel"]. Dat komt niet overeen.
2. Misschien zitten er spaties vóór je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?xml> aanroep, dat vind ie ook niet leuk.
Gewijzigd op 01/01/1970 01:00:00 door Gerben Jacobs
 

28/11/2009 10:56:00
Quote Anchor link
Sowieso is het ook beter om gebruik te maken van dom of simplexml.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.