+ Antworten
Ergebnis 1 bis 3 von 3

PHP: handler in klassen ( speziell xml )

Eine Diskussion über PHP: handler in klassen ( speziell xml ) im Forum Technik Ecke. Teil des Off Topic-Bereichs; Achtung, dies ist speziell an PHP Coder gerichtet, also wer da keine Ahnung hat kann sich auch die Mühe sparen ...

  1. #1

    PHP: handler in klassen ( speziell xml )

    Achtung, dies ist speziell an PHP Coder gerichtet, also wer da keine Ahnung hat kann sich auch die Mühe sparen weiterzulesen
    Danke.


    Hi,

    weiß einer welchen sinn es hat, das ein handler in php nicht aus seiner funktion rauskommt, wenn es in einer klasse ist ?

    ich meine mit meinem walkaround ( Klassen in Klassen aufrufen ) kann ich es zwar immernoch benutzen und mit

    1. xml_set_object($this->parser,&$this);

    auch die variablen ansprechen, aber es ist ja nicht gerade das wahre ständig aus der klasse rauszugehen um sie anzusprechen, obwohl man in der gleichen bleiben will ...


    wenn das so weiter geht schreib ich mir nen eigenen xml handler ... ist doch scheiße 1001 funktion zu erstellen...

  2. #2
    so, ich habe mir jetzt selbst was zurecht gebastelt:

    1. class vsm extends parser {
    2.  
    3. function vsm() {
    4. $this->options = array('data' => NULL,
    5. 'tag_start' => NULL,
    6. 'tag_end' => NULL,
    7. 'attribute' => NULL);
    8. $this->return = NULL;
    9. }
    10.  
    11. function vsm_set_option($name,$value) {
    12.  
    13. }
    14.  
    15. function vsm_set_handler($name,$function) {
    16. $this->parser[$name] = $function;
    17. }
    18.  
    19. function vsm_set_parser($namespace=':') {
    20. if (!empty($namespace))
    21. $this->options['namespace'] = $namespace;
    22. }
    23.  
    24. function vsm_parse($data) {
    25.  
    26. $parser = $this->parser;
    27.  
    28. while($data == true) {
    29. $hash = md5($data);
    30.  
    31. $parse = substr($data,0,strpos($data,'<'));
    32. $data = substr_replace($data,'',0,strlen($parse));
    33. if (!empty($parse) && !empty($parser['data']))
    34. $this->return .= $this->$parser['data']($parse);
    35.  
    36. $parse = substr($data,1,(strpos($data,'>')));
    37. $data = substr_replace($data,'',0,(strlen($parse)+1));
    38.  
    39. if ($parse[0]== '/') {
    40. $parse = substr($parse,1,strlen($parse)-2);
    41.  
    42. if (!empty($parser['tag_end']))
    43. $this->return .= $this->$parser['tag_end']($parse);
    44. unset($parse);
    45. }
    46.  
    47. if (!empty($parse)) {
    48. $parse = substr($parse,0,strlen($parse)-1);
    49. $parse = explode(' ',$parse);
    50.  
    51. $tag_start = explode($this->options['namespace'],array_shift($parse));
    52.  
    53. if (!empty($parser['tag_start']))
    54. $this->return .= $this->$parser['tag_start']($tag_start[0]);
    55. if (!empty($tag_start[1]) && !empty($parser['namespace']))
    56. $this->return .= $this->$parser['namespace']($tag_start[1]);
    57.  
    58. foreach ($parse as $attr)
    59. if (preg_match('%^([a-z]+)="([a-z0-9_-]+)"$%sU',strtolower($attr),$value) && !empty($parser['attribute']))
    60. $this->return .= $this->$parser['attribute']($value[1],$value[2]);
    61.  
    62. if (!empty($parser['tag_start']))
    63. $this->return .= $this->$parser['tag_start']('>');
    64. }
    65. if ($hash == md5($data))
    66. die('ERROR');
    67. }
    68. }
    69.  
    70. }

    das ganze ist natürlich noch in der testphase, aber es erkennt den queltext immerhin schon genau so wie der olle xml_parser von php.
    und ich kann so wirklich auf die funktionen verlinken, die auch zusammenarbeiten ^^

    außerdem, wenn ich mir so die größe anschaue ist es scon mal sehr nice geworden

    insbesondere die möglichkeit der nutzung von extends finde ich viel besser, da ich so auch den code besser strukturieren kann.
    Geändert von Osbes (03.09.2006 um 12:14 Uhr)

  3. #3
    hier mal ne aktuelle version:

    1. <?php
    2. include_once('parser.class.php');
    3.  
    4. class vsm extends parser {
    5.  
    6. var $return;
    7. var $parser;
    8. var $options;
    9.  
    10. function vsm() {
    11. $this->options = array('data' => NULL,
    12. 'tag_start' => NULL,
    13. 'tag_end' => NULL,
    14. 'attribute' => NULL);
    15. $this->return = NULL;
    16. }
    17.  
    18. function vsm_set_option($name,$value) {
    19.  
    20. }
    21.  
    22. function vsm_set_handler($name,$function) {
    23.  
    24. $this->parser[$name] = $function;
    25. }
    26.  
    27. function vsm_set_parser($namespace=':') {
    28.  
    29. if (!empty($namespace))
    30. $this->options['namespace'] = $namespace;
    31. }
    32.  
    33. function vsm_parse($data) {
    34.  
    35. $parser = $this->parser;
    36.  
    37. while(!empty($data)) {
    38. $hash = md5($data);
    39.  
    40. $parse = substr($data,0,strpos($data,'<'));
    41. $data = substr_replace($data,'',0,strlen($parse));
    42. if (!empty($parse) && !empty($parser['data']))
    43. $this->return .= $this->$parser['data']($parse);
    44.  
    45. $parse = substr($data,1,(strpos($data,'>')));
    46. $data = substr_replace($data,'',0,(strlen($parse)+1));
    47.  
    48. if ($parse[0]== '/') {
    49. $parse = substr($parse,1,strlen($parse)-2);
    50.  
    51. if (!empty($parser['tag_end']))
    52. $this->return .= $this->$parser['tag_end']($parse);
    53. unset($parse);
    54. }
    55.  
    56. if (!empty($parse)) {
    57. $parse = substr($parse,0,strlen($parse)-1);
    58. $parse = explode(' ',$parse);
    59.  
    60. $tag_start = explode($this->options['namespace'],array_shift($parse));
    61.  
    62. if (!empty($parser['tag_start']))
    63. $this->return .= $this->$parser['tag_start']($tag_start[0]);
    64. if (!empty($tag_start[1]) && !empty($parser['namespace']))
    65. $this->return .= $this->$parser['namespace']($tag_start[1]);
    66.  
    67. foreach ($parse as $attr)
    68. if (preg_match('%^([a-z]+)="([a-z0-9_-]+)"$%sU',strtolower($attr),$value) && !empty($parser['attribute']))
    69. $this->return .= $this->$parser['attribute']($value[1],$value[2]);
    70.  
    71. if (!empty($parser['tag_start']))
    72. $this->return .= $this->$parser['tag_start']('>');
    73. }
    74. if ($hash == md5($data))
    75. die('ERROR');
    76. }
    77. trigger_error(__CLASS__.':'.__FUNCTION__.':001');
    78. }
    79.  
    80. function vsm_parse_free() {
    81.  
    82. $this->parser = NULL;
    83. $return = $this->return;
    84. $this->return = NULL;
    85. return $return;
    86. }
    87.  
    88. }
    89. ?>

    und der parser kann dann zb mit ner build klasse erstellt werden, um übersicht zu halten

+ Antworten

Ähnliche Themen

  1. php script wanted
    Von FiX im Forum Technik Ecke
    Antworten: 3
    Letzter Beitrag: 09.09.2002, 21:27
  2. apache, php, perl, mysql;
    Von starter im Forum Technik Ecke
    Antworten: 6
    Letzter Beitrag: 31.07.2002, 00:07
  3. Php-Projekt
    Von inq39 im Forum Technik Ecke
    Antworten: 0
    Letzter Beitrag: 08.07.2002, 00:58
  4. webspace mit php und mysql
    Von m@x im Forum Technik Ecke
    Antworten: 15
    Letzter Beitrag: 17.05.2002, 21:02
  5. .php seiten
    Von DaNieL im Forum Technik Ecke
    Antworten: 12
    Letzter Beitrag: 06.08.2001, 00:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •