Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP5: unexpected T_STRING bzw. unexpected T_OBJECT_OPERATOR

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP5: unexpected T_STRING bzw. unexpected T_OBJECT_OPERATOR

    Hallo,

    ich bastel' zurzeit eine abstrakte PHP5-Klasse zum Datenbankzugriff, aber die schmeißt mir ganz merkwürdige Fehlermeldungen. Zunächst der Quelltext der Klasse:
    PHP-Code:
    <?php
    abstract class DB_Baseclass {


        
    /**
         * Handle for DB-Connection
         */
        
    static private $db NULL;

        
    /**
         * Constructor
         *
         * Checks whether a connection to the database exists, else establishes a 
         * connection and stores it in the Classvariable $db. 
         *
         * @return Boolean True if succeeded, else false
         */
        
        
    function __construct() {
        global 
    $config;

        
    /**
         * Including Pear-DB
         */
        
    include_once($config['path_db']."DB.php");

        
    //create DSN
        
    $dsn "mysql://".$config['db_user'].":".$config['db_pwd']."@".$config['db_host']."/".$config['db_database'];
        
    $db  DB::connect($dsn);
        
        if (
    DB::isError($db)) {
            
    logerror(___FILE____LINE__"Verbindungsaufbau zur DB gescheitert! Fehler: ".$db->getMessage());
            return 
    false;
        }
    //if
        
        
    $this->db $db;
            return 
    true;
        }
    //Constructor

    ?>
    Die Fehlermeldungen sind 1. (so wie der Quelltext oben steht): "Parse error: parse error, unexpected T_STRING, expecting T_VARIABLE or '$' in /opt/lampp/htdocs/v2/inc/DB_Baseclass.inc.php on line 64" (Z.64 ist die mit $this->db = $db) und 2. wenn ich Z.64 auskommentiere "Parse error: parse error, unexpected T_OBJECT_OPERATOR in /opt/lampp/htdocs/v2/inc/DB_Baseclass.inc.php on line 65".
    Ich extende die Klasse in einer neuen Klasse, in der ich dann parent::__construct() aufrufe. Einfach mal das Schlüsselwort vor der Klassendefinition rauszunehmen habe ich auch schon versucht, hat leider nichts geändert.
    Hat jemand eine Idee?

    Besten Dank,
    Michael


  • #2
    Der Fehler scheint vor dem hier gezeigten Ausschnitt zu liegen.

    Kommentar


    • #3
      Hmm, davor ist aber nichts, nur VarDeklaration und Getmethoden Ich paste trotzdem nochmal komplett.
      Ich hab aber mittlerweile den Verdacht dass das ein Bug ist, obwohl der schon heftig wäre...

      PHP-Code:
      <?php
      /**
       * Abstract Baseclass for Database-Access
       * 
       * This class makes the establishes the connection to the database 
       * and stores it in the classvariable $db. The Accessdata for the 
       * Database are taken from the configuration file. 
       * 
       * Created at 2005-05-17, 15:15
       * @package db-classes
       */
       
      abstract class DB_Baseclass {


          
      /**
           * Handle for DB-Connection
           */
          
      static private $db NULL;


          
      //############################## Get-Methods ##################################


          /**
           * Get-Method for db
           * 
           * @return Handle db
           */
          
      public function getDb() {
              return 
      $this->db;
          }
      //function getdb


          //############################## Konstruktor ##################################

          /**
           * Constructor
           *
           * Checks whether a connection to the database exists, else establishes a 
           * connection and stores it in the Classvariable $db. 
           *
           * @return Boolean True if succeeded, else false
           */
          
          
      function __construct() {
          global 
      $config;

          
      /**
           * Including Pear-DB
           */
          
      include_once($config['path_db']."DB.php");

          
      //create DSN
          
      $dsn "mysql://".$config['db_user'].":".$config['db_pwd']."@".$config['db_host']."/".$config['db_database'];
          
      $db  DB::connect($dsn);
          
          if (
      DB::isError($db)) {
              
      logerror(___FILE____LINE__"Verbindungsaufbau zur DB gescheitert! Fehler: ".$db->getMessage());
              return 
      false;
          }
      //if
          
          
      $this->db $db;
              return 
      true;
          }
      //Constructor
          

          //############################## Destruktor ###################################

          /**
           * Destructor
           *
           * Unsets the object and does cleanup-work if necessary
           */
          
      function __destruct() {
          if (
      $this->db != NULL) {
              
      $this->db->disconnect();
              
      $this->db NULL;
          }
      //if
          
      }//Destructor
          

          //############################ Other Functions ################################
          
      abstract function storeObj($obj);
          abstract function 
      readObj($obj);
          abstract function 
      deleteObj($obj);
          abstract function 
      readListOfObj();

      }
      //class


      ?>
      und die erweiternde Klasse ist:

      PHP-Code:
      <?php
      /**
       * Testfile which implements the DB_Baseclass
       *
       * @package testfiles
       */
      class DB_DB_Baseclass extends DB_Baseclass {
          function 
      __construct() {
      //    DB_Baseclass::__construct();
      return true;
          }
      //function
          
          
      function storeObj($obj) {
          return 
      true;
          }
          function 
      readObj($obj) {
          return 
      true;
          }
          function 
      deleteObj($obj) {
          return 
      true;
          }
          function 
      readListOfObjects() {
          return 
      true;
          }
      }
      //class
      ?>

      Kommentar


      • #4
        falls ich dir einen tipp geben darf:
        tu dir selbst einen gefallen und gib deiner klasse ein fertig initialisiertes DB-objekt als parameter in den konstruktor oder verzichte zumindest auf die besch*ssenen globals und gib die konfigurations-variablen in den konstruktor mit - so wie du arbeitest wirst du früher oder später nicht glücklich werden.


        wie rufst du die klasse beim benutzen auf? hoffentlich schon mit '$obj = & new Object() ' und nicht mit
        $obj = ClassName::__construct(); ?

        zweiteres würde bedeuten, dass du den konstruktor statisch aufrufst und damit keinen zugriff auf $this hast.

        Kommentar


        • #5
          Hmm, also nur dass wir nicht aneinander vorbeireden: Es gibt die eigentliche PHP-Datei, in dieser wird wie von dir beschrieben ein neues Objekt der Klasse DB_DB_Baseclass erzeugt. Diese erweitert die DB_Baseclass.
          Mit $this hast du also in Bezug auf die abstrakte Klasse wahrscheinlich Recht - ich habs aber gerade in die DB_DB_ verschoben, der Fehler ist gleich...

          Kommentar


          • #6
            zeig mal einfach, wie du das ganze verwendest. dann kann ich's selbst mal ausprobieren. ich will also auch die instanziierung des objekts sehen.

            Kommentar


            • #7
              nur so btw:

              parse-error
              Parse-Errors selbst finden:
              http://tut.php-q.net/parseerrorfind.html#u2
              robo47.net - Blog, Codeschnipsel und mehr
              | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

              Kommentar


              • #8
                Das hier ist die dritte, aufrufende Datei:
                PHP-Code:
                <?php
                /**
                 * Testfile for testing the class DB_Baseclass
                 *
                 * @package testfiles
                 */

                /**
                 * Including Config
                 */
                include_once("/opt/lampp/htdocs/v2/inc/config.inc.php");

                /**
                 * Including DB-baseclass
                 */
                include_once("/opt/lampp/htdocs/v2/inc/DB_Baseclass.inc.php");

                /**
                 * Including DB-Class
                 */
                include_once("/opt/lampp/htdocs/v2/inc/DB_DB_Baseclass.inc.php");

                $obj = new DB_DB_Baseclass();
                var_dump($obj);
                ?>

                Kommentar


                • #9
                  Auch beim kompletten Skript mit DB_Baseclass bekomme ich keinen parse-error.

                  Kommentar


                  • #10
                    ach? Das ist interessant. Wieso denn nicht bei mir?
                    Bei dir läuft das also alles so wie ich mir das dachte?
                    Dann wäre es sehr hilfreich wenn wir mal eben Systeme vergleichen könnten.

                    Kommentar


                    • #11
                      jupp... läuft bei mir auch - bis auf die tatsache, dass ich readListOfObjects() in readListOfObj() umbenennen musste und ich ein Notice: undefined property '$db' bekomme.

                      Kommentar


                      • #12
                        Nur mal so:
                        sage mal, du versuchst einer
                        STATIC variable was zu zuweisen ????

                        ist static nicht so was ähnliches wie konstant - darf/kann nach erster initialisierung nicht geändert werden ?

                        Kommentar


                        • #13
                          ja, stimmt, das ist mir mittlerweile auch schon aufgefallen mit readListofObj().
                          Also, ich hab PHP 5.0.4 auf einem Lampp-System, alles beim Lampp-Standard gelassen.
                          Configure Command:

                          './configure' '--prefix=/opt/lampp' '--with-apxs2=/opt/lampp/bin/apxs' '--with-config-file-path=/opt/lampp/etc' '--with-mysql=/opt/lampp' '--disable-debug' '--enable-bcmath' '--enable-calendar' '--enable-ctype' '--enable-dbase' '--enable-discard-path' '--enable-exif' '--enable-filepro' '--enable-force-cgi-redirect' '--enable-ftp' '--enable-gd-imgstrttf' '--enable-gd-native-ttf' '--with-ttf' '--enable-magic-quotes' '--enable-memory-limit' '--enable-safe-mode' '--enable-shmop' '--enable-sigchild' '--enable-sysvsem' '--enable-sysvshm' '--enable-track-vars' '--enable-trans-sid' '--enable-versioning' '--enable-wddx' '--enable-yp' '--with-ftp' '--with-gdbm=/opt/lampp' '--with-jpeg-dir=/opt/lampp' '--with-png-dir=/opt/lampp' '--with-freetype-dir=/opt/lampp' '--without-xpm' '--with-zlib=yes' '--with-zlib-dir=/opt/lampp' '--with-openssl=/opt/lampp' '--with-expat-dir=/opt/lampp' '--enable-xslt=/opt/lampp' '--with-xsl=/opt/lampp' '--with-ming=/opt/lampp' '--with-dom=/opt/lampp' '--with-ldap=/opt/lampp' '--with-ncurses=/opt/lampp' '--with-gd' '--with-imap-dir=/opt/lampp' '--with-imap-ssl' '--with-imap=/opt/lampp' '--with-gettext=/opt/lampp' '--with-mssql=/opt/lampp' '--with-interbase=shared,/opt/interbase' '--with-mysql-sock=/opt/lampp/var/mysql/mysql.sock' '--with-oci8=shared' '--with-mcrypt=/opt/lampp' '--with-mhash=/opt/lampp' '--enable-sockets' '--enable-mbstring=all' '--with-curl=/opt/lampp' '--enable-mbregex' '--enable-zend-multibyte' '--with-zip=/opt/lampp' '--enable-exif' '--with-bz2=/opt/lampp' '--with-sqlite=shared' '--with-libxml-dir=/opt/lampp' '--enable-soap' '--enable-pcntl' '--enable-dbx' '--with-mysqli=/opt/lampp/bin/mysql_config' '--with-mime-magic'

                          Es muss dann ja irgendwo da oder in der PHP.ini liegen, oder?
                          ach ja, was heißt Notice: undefined property '$db' ?

                          Danke schonmal!

                          Kommentar


                          • #14
                            ach ja, was heißt Notice: undefined property '$db' ?
                            ab zu den anfängern

                            Kommentar


                            • #15
                              *g*
                              Naja, ich weiß schon was es heißt - aber ist doch definiert...?
                              Wie schauts aus mit dem Konfig-Vergleich?

                              @Sakuraiel: Static heißt - man korrigiere mich wenn ich mich irre, aber ich glaube ich liege richtig - dass es an einem statischen Platz im Speicher steht. Es greifen also alle Objekte auf den gleichen Speicher zu, und alle benutzen die gleiche Var. Dass sie nicht veränderbar ist heißt das nicht.

                              Kommentar

                              Lädt...
                              X