Parse error: syntax error, unexpected T_STRING in on line 1

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • was "angeblich" auch funktioniert ist

    Quellcode

    1. <<??>?xml version='1.0'?<??>>

    Rein der Theorie nach soll dann <??> in php geparst werden und somit bleibt im Browser nur noch die xml deklaration übrig.
    Ich habe aber wie gesagt bisher immer nur die oben genannte Variante genutzt

    Tigerente schrieb:

    header("Content-type: text/xml" );
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";


    Falls jemand einen sauberen Weg in PHP kennt, der auch als sauberer Code gilt bitte einfach mal hier posten :)
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • glaub mir.. das echo ist die sauberste Möglichkeit, ohne den ganzen Code umzuwerfen.

    Sauberer geht es nur, wenn du von direkten Ausgaben wegkommst und auf eine Template Engine umstellst.
    In der Template Engine hast du dann nur noch spezielle Platzhalter und Anweisungen und PHP Code wird gar nicht erst versucht zu evaluieren.
    Das XML Tag ist das perfekte Beispiel um zu demonstrieren, dass es Probleme gibt, wenn man Anwendungscode und Ausgabe vermischt.
  • da will ich ja auch hin
    prinzip mvc mit template engine

    aber wie gebe ich das template dann aus, ohne das das template vorher evaluiert wird ?
    oder besser wie lese ich das ein ?

    ausgabe erfolgt (so plane ich das)
    über

    Quellcode

    1. PHP4
    2. print $view->output();
    3. PHP5
    4. print view::output();

    oder sollte ich das noch überdenken :) ?
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • dein php4/ php5 beispiel hinkt etwas.
    Einmal benutzt du eine Memberfunktion, einmal eine statische Methode.. Aber warum?

    Der Code muss nicht evaluiert werden, stattdessen werden Platzhalter ersetzt,

    Beispiel für eine simple Template Engine

    index.tpl

    Quellcode

    1. Hallo {$username},
    2. wie geht es dir?


    Template.php

    Quellcode

    1. <?php
    2. class Template {
    3. protected $replace = array();
    4. public function add($key, $val) {
    5. $this->replace['{$'.$key.'}'] = $val;
    6. }
    7. public function display($filename) {
    8. $file = file_get_contents($filename);
    9. echo str_replace(array_keys($this->replace), $this->replace, $file);
    10. }
    11. }
    Alles anzeigen


    index.php

    Quellcode

    1. <?php
    2. $tpl = new Template();
    3. $tpl->add('username', 'peter');
    4. $tpl->display('index.tpl');
  • Die Unterschiede von php4 zu 5 kann ich Dir ganz leicht erklären :)

    in php5 kann ich die __construct als protected oder private declarieren und somit die erzeugung eines objects unterbinden. eine instanz ist ja auch nicht nötig wenn ich mit self:: arbeiten kann.
    in php4 gibt es kein self:: daher stelle ich (umständlich aber sauber) sicher, dass mein script mit einem festen object arbeitet. im beispiel oben halt view::function(param) und $view->function(param). im endeffekt machen die funktionen das gleiche nur einmal in php4 (ohne self dafür immer in $view) und in php5 (da hab ich halt self::)

    aber das mit dem file_get_contents($filename) hatte ich in meinem script noch nicht auf der liste (added)
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Hi,
    In php4 gibts das Schlüsselwort static in Funktionen nicht - sie können aber dennoch statisch benutzt werden. Schau dir mal das Beispiel an: phpbar.de/w/static
    Oder auch das Beispiel hier, dort siehst du auch wie du auf statische Variablen zugreifst: achfrag.net/implementation-des-singleton-pattern-php4
    Somit braucht du funktional für php4/5 nicht anders programmieren - nur die Syntax ist eine andere.
  • ich denke ich kann die klasse in php4 auch so gestallten, dass das object immer in $varname ist und ich trotzdem (wie in php5) über class::classfunction() arbeiten kann.

    habe mir das singelton für php4 und 5 schon angeschaut und für meine zwecke abgeleitet. bisher arbeiten meine klassen (je eine für php4.4.0+ und php 5.0.0+) mit exakt den gleichen aufrufen (und ergebnissen) trotz leicht unterschiedlicher arbeitsweisen.
    aber singleton setzt mehr oder weniger voraus, dass ich eine class instanziere (was aber z.b. bei meinem dispatcher oder meiner language class nicht nötig, bzw. erwünscht ist).

    naja wenn mein kleines framework steht bekommst nen link zum begutachten d0nut :)
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Auch hier hätte ich mal wieder ne Frage ^^
    Wieso instanzierst du die View-Klasse denn nicht? Schliesslich setzt man ja ein Template und die Variabeln dafür fest, wozu eine Instanz viel besser geeignet wäre (als Singleton versteht sich).
    Oder nicht?
  • wenn ich das mit dem singleton richtig interpretiere "sollen" diese über

    Quellcode

    1. $a = singleton::getinstance();
    2. $b = singelton::getinstance();


    aufgerufen werden und erzeugen dann genau EIN object
    ist denn z.b. bei einer url-dispatcher class ein object nötig ?

    Quellcode

    1. $controllerfile = dispatcher::dispatch('was ich dispatchen will z.b. request_uri');


    bei meiner template engine erzeuge ich (in php5 evtl als) singleton ähnlich nur EIN object (in php4 ist das nur nicht ganz so einfach möglich)
    in php4 muss ich (zu lasten der performance) etwas trickreich dafür sorgen, dass nur EIN (und zwar ein bestimmtes) object generiert wird.

    Quellcode

    1. class php4class
    2. {
    3. function php4function()
    4. {
    5. global $DieseUndKeinAnderesObject;
    6. if(get_class($DieseUndKeinAnderesObject) != 'php4class')
    7. {
    8. $DieseUndKeinAnderesObject = new php4class;
    9. return true;
    10. }
    11. else
    12. {
    13. echo "geht los";
    14. }
    15. }
    16. }
    Alles anzeigen
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Ob bei einem Dispatcher ein Objekt notwendig ist?
    Was wäre denn die Alternative - die alternative ist alle Methoden statisch zu machen. Für Helper Klassen ist das durchaus sinnvoll.
    Aber sobald es um Vererbung geht, arbeitet man eigentlich lieber mit Instanzen.

    Zu deinem PHP4 singleton:
    Ich habe oben den Link gepostet wie man ein schönes PHP4 Singleton macht: achfrag.net/implementation-des-singleton-pattern-php4
    DAS IST FALSCH - der code enthält kein return.. hier mal korrigiert:

    Quellcode

    1. <?php
    2. class Singleton {
    3. function Singleton() {
    4. print "Singleton Instanz erstellt <br />";
    5. }
    6. function &get_instance() {
    7. static $instance;
    8. if(! is_object( $instance ) ) {
    9. $instance = new Singleton();
    10. }
    11. return $instance;
    12. }
    13. }
    14. $singleton =& Singleton::get_instance();
    15. $singleton =& Singleton::get_instance();
    16. ?>
    Alles anzeigen


    Globale Variablen sind nicht notwendig!
  • @ d0nut
    ich weis doch (mittlerweile) schon wie das singleton arbeitet :)

    aber in php4 kann ich mir jederzeit über

    Quellcode

    1. $a = new classa;
    2. $a->functiona();

    und einige zeilen / scripte später mit

    Quellcode

    1. $b = new classa;
    2. $b->functionb();

    eine weitere instanz. ich brauche aber sicherheit, dass $a die instanz ist in der gearbeitet wird. und somit würde der aufruf $b->functionb(); einen fehler verursachen. und deshalb erzeuge ich mit meinem obigen beispiel einfach nur EINE instanz oder besser ignoriere andere instanzen :D
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll