Variablenübergabe funktioniert nicht

speicher

Erfahrenes Mitglied
Hallo !
Ich versuche bei meinem Newsticker für einen RDF-Newsfeed , der in ein Array geschrieben wird, die Anzahl der geparsten Elemente mit auszugeben. Dafür möchte ich die Variable $_index als Maximalanzahl von Elementen mit verwenden, aber irgendwie funktioniert die Übergabe nicht. Danke für jeden Hinweis.


ausgabe.php
PHP:
<?php 
include("parser.php");
$max=$_index;

for ($x = 1; $x < ($max+1); $x++) {

echo '<br><hr><br>';
echo '<a href="' . print_r($items[$x][link], true) . '"target="News" class="z"><span>['.$x.'/'.$max.'] '.$items[$x][title].'</span><br><font face="Lucida Sans Unicode" size="1">[externer Link]</font></a>';
}

?>



parser.php
PHP:
<?php
class rdfparser {
   var $_items; // array the items
   var $_may; // array what may be done
   var $_act; // string current active
   var $_index; // integer current index
   var $_url; // url to open

 
   function rdfparser($url)
   {
       $this->_url = $url;
   }


   function parse() 
    {
        $this->_items = array();
        $this->_index = 0;
        $this->_may['parse'] = false;
        
        $parser = xml_parser_create();
        
        xml_set_object($parser, $this);
        xml_set_element_handler($parser, "_startElement", "_endElement");
        xml_set_character_data_handler($parser, "_charHandler");
        
        $fp = fopen($this->_url, "r");
        while(!feof($fp)) {
            $line = fgets($fp, 4096);
            xml_parse($parser, $line);
        }
        fclose($fp);
        
        xml_parser_free($parser);
        
        return $this->_items;
    }



    function _startElement($parser, $name, $attrs)  
    {
        // allow parsing chardata as soon as an element is opened
        $this->_may['char'] = true;
        
        if ($name=="ITEM") {
            // allow parsing as soon as an item element was opened
            $this->_may['parse'] = true;
            // one more item -> increment index
            $this->_index++;
            $this->_items[$this->_index] = Array('title' => '', 'link' => '', 'description' => '');
        } else if ($name=="TITLE") {
            // current active: title
            $this->_act = "TITLE";
        } else if($name=="LINK") {
            // current active: link
            $this->_act = "LINK";
        } else if($name=="DESCRIPTION") {
            // current active: description
            $this->_act = "DESCRIPTION";
        } else {
            // unknown tag, don't allow adding chardata
            $this->_may['char'] = false;
        }
        $this->_act = strtolower($this->_act);
    }



    function _endElement($parser, $name) 
    {
        if($name=="ITEM") {
            // item tag closed: parsing not allowed
            $this->_may['parse'] = false;
        } elseif($name=="TITLE" || $name=="LINK" || $name="DESCRIPTION") {
            // datatag closed, we don't want different chardata
            $this->_may['char'] = false;
        }
    }

    function _charHandler($parser, $data) 
    {
        $data = trim($data);
        
        if(!$this->_may['char'] OR !$this->_may['parse']) {
            return;
        }
        if (isset($this->_items[$this->_index][$this->_act])) {
            $this->_items[$this->_index][$this->_act] .= $data;
        } else {
            $this->_items[$this->_index][$this->_act] = $data;
        }
    }
}

$rdfparser = new rdfparser('http://www.tagesschau.de/newsticker.rdf');
$items = $rdfparser->parse(); ?>
 
Da $_index in einer Klasse als Variable Deklariert wurde musst du erstmal duie Klasse Starten z.B. so:

PHP:
<?php
$var = new rdfparser();
$_index = $var->_index;

?>

MfG Funjoy
 
Bastel dir noch eine Get Methode für die Variable $_index. Das ist eine lokale Variable und nur innerhalb der Klasse gültig. Was auch Sinn ergibt.

PHP:
function getIndex()
{
  return $this->_index;
}

Die Zeile

$max=$_index;

ersetzt du durch

$max = $rdfparser->getIndex();

Die letzten beiden Zeilen unterhalb der Klasse haben eigentlich in der Klasse nichts zu suchen. Du solltest sie außerhalb der Klasse benutzen.
 
Zurück