Tobias H.: PHP5 interpretation Problem

Hallo,
ich habe folgendes Problem:
ich habe auf meinem MAC den Apache v. 1.3.33 und PHP5.2.1.
Wenn ich jetzt mein Skript aufrufe wird folgender Fehler ausgegeben:
Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION

In diesem Skript wird eine Klasse aufgerufen und der Fehler soll anscheinend in folgender Zeile stattfinden:
 private static $instanceMap = array();

Ich sehe hier aber keine Fehler...woran könnte das noch liegen? kann es sein, dass der interpreter noch in php4 interpretiert? aber die oben angegebenen daten stehen auch auf meiner testseite wo ich phpinfo() ausgeben lasse.

vielen dank für eure hilfe!

Tobias H.

  1. Hallo,

    Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION

    das kann m.E. grundsätzlich auch auf einen Fehler unmittelbar vor der
    angebenen Zeile hindeuten.

    Grüsse
    Cyx23

    1. Hallo,
      hier die Zeilen davor und danach:
      <?php
      class singleton
      {

      /*
          Wie funktioniert das Verbinden mit einer Klasse? Ganz einfach:
              $x = Singleton::connect( "Klassenname" ) ;
        */
          private static $instanceMap = array();

      // protected Konstruktor um die Instanzierung von außen zu verhindern
          protected function __construct()
          {
          }
      ?>

      grüße,
      tobias h.

      1. echo $begrüßung;

        hier die Zeilen davor und danach:

        Daraus ist der Fehler nicht ersichtlich. Er muss noch weiter davor liegen. Beim Syntaxfehlerfinden kann dir ein Editor helfen, der auf die PHP-Syntax beherrscht.

        echo "$verabschiedung $name";

  2. Hello,

    Wenn ich jetzt mein Skript aufrufe wird folgender Fehler ausgegeben:
    Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION

    In diesem Skript wird eine Klasse aufgerufen und der Fehler soll anscheinend in folgender Zeile stattfinden:
    private static $instanceMap = array();

    Ich sehe hier aber keine Fehler...woran könnte das noch liegen?

    Bitte poste doch auch die paar Zeilen vor der betroffenen.

    Wahrscheinlich fehlt nur eine } oder ein Semikolon.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  3. Hallo,
    ich habe folgendes Problem:
    ich habe auf meinem MAC den Apache v. 1.3.33 und PHP5.2.1.
    Wenn ich jetzt mein Skript aufrufe wird folgender Fehler ausgegeben:
    Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION

    In diesem Skript wird eine Klasse aufgerufen und der Fehler soll anscheinend in folgender Zeile stattfinden:
    private static $instanceMap = array();

    Ich sehe hier aber keine Fehler...woran könnte das noch liegen? kann es sein, dass der interpreter noch in php4 interpretiert? aber die oben angegebenen daten stehen auch auf meiner testseite wo ich phpinfo() ausgeben lasse.

    vielen dank für eure hilfe!

    Tobias H.

    Statische Klassenvariablen können nicht mit Funktionsaufrufen initialisiert werden (keine Ahnung warum das so ist). Workaround:

    class MyClass {
        private static $mystatic = null;
        public static function classInit() {
            if (null===self::$mystatic) {
                self::$mystatic = array();
            }
        }
    }
    MyClass::classInit();

    Einen static{}-Block zur Klasseninitialisierung wie in Java gibt es in PHP leider nicht, also baut man sich den von Hand nach (s.o.).

    Gruss
    Michael

    1. echo $begrüßung;

      Statische Klassenvariablen können nicht mit Funktionsaufrufen initialisiert werden (keine Ahnung warum das so ist). Workaround:

      Generell lassen sich Klassen- und Objektvariablen nicht mit Funktionsergebnissen initialisieren. Zu welchem Zeitpunkt sollte denn das geschehen? Bereits beim Parsen, wenn noch gar nicht aller Code fertig geparst wurde? Nach dem Parsen und bevor die Steuerung an dein Script übergeben wird? Beim ersten Zugreifen?

      Für komplexere Dinge als einfache Zuweisungen gibt es für Objekte den Konstruktur, und statische Dinge initialisiert man eben zu Fuß.

      echo "$verabschiedung $name";

      1. Generell lassen sich Klassen- und Objektvariablen nicht mit Funktionsergebnissen initialisieren. Zu welchem Zeitpunkt sollte denn das geschehen? Bereits beim Parsen, wenn noch gar nicht aller Code fertig geparst wurde? Nach dem Parsen und bevor die Steuerung an dein Script übergeben wird? Beim ersten Zugreifen?

        Statische initialisierungen *könnte* PHP z.B. beim Erreichen der schliessenden "}" der Klasse ausführen, analog wie z.B. Java dies beim laden der Klasse tut, oder am Ende des Parsevorgangs für das File in dem die Klasse definiert wurde. Wohl mehr eine Frage des Wollens als den Könnens seitens der PHP-Entwickler.

        Objektvariablen können übringens mit Funktionsaufrufen initialisiert werden (z.B.: "private $myarray = array();" geht).

        Den Konstruktor vorzuschieben ist nichts weiter als eine schlechte Ausrede, PHP ist *sehr* eigenwillig was OO angeht. Die Initialisierung vom Membern ist gerade in PHP weniger fehleranfällig als der Konstruktor (Stichwort: Vererbung, Kindkonstruktor).

        Gruss
        Michael

        1. echo $begrüßung;

          Statische initialisierungen *könnte* PHP z.B. beim Erreichen der schliessenden "}" der Klasse ausführen,

          Und was soll PHP machen, wenn eine Funktion aufzurufen wäre, deren Quelltext noch nicht geparst wurde?

          Objektvariablen können übringens mit Funktionsaufrufen initialisiert werden (z.B.: "private $myarray = array();" geht).

          array() ist keine Funktion sondern ein Sprachkonstrukt. Versuch es mit einer echten Funktion und du wirst scheitern.

          Den Konstruktor vorzuschieben ist nichts weiter als eine schlechte Ausrede, PHP ist *sehr* eigenwillig was OO angeht. Die Initialisierung vom Membern ist gerade in PHP weniger fehleranfällig als der Konstruktor (Stichwort: Vererbung, Kindkonstruktor).

          Diese Andeutung eignet sich nicht als Diskussionsgrundlage. Meinst du vielleicht, dass man in einem Konstruktor einer erbenden Klassen vergessen könnte, den geerbten Konstruktor aufzurufen? Wenn ja, dann ist das ja kein Fehler von PHP.

          echo "$verabschiedung $name";