Unerklärlicher Parse-Fehler

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unerklärlicher Parse-Fehler

    Diese Linie erzeugt bei mir einen Parse-Fehler, den ich mir einfach nicht erklären kann. Was mache ich falsch? Sind als Funktionsparameter keine Funktionen erlaubt?

    PHP-Code:
    public function __construct($dbhost$dbuser$dbpw$dbname$dbport ini_get('mysqli.default_port')){ // Linie 55

    /*...*/ 

    Der Fehler:

    Code:
    [COLOR=#ff0000][B]Parse error[/B]:  parse error, expecting `')'' in [B]xxx.php[/B] on line [B]55[/B][/COLOR]

  • #2
    Es darf keine Funktion in der Parameterliste vorkommen. Sprich, das ini_get() darf dort nicht stehen.

    Alternative:
    PHP-Code:
    public function __construct($dbhost$dbuser$dbpw$dbname$dbport null) {
        if (
    $dbport === null) {
            
    $dbport ini_get('mysqli.default_port');
        }
        
    /*...*/ 

    Kommentar


    • #3
      Code:
      <?php
      public function __construct($dbhost, $dbuser, $dbpw, $dbname, $dbport = null) {
          if ($dbport === null) {
              $dbport = ini_get('mysqli.default_port');
          }
      }  
      ?>
      Parse error: syntax error, unexpected T_PUBLIC in /srv/www/htdocs/leipzigtest/test.php on line 2
      PHP 5.2.10 - das public muss weg.

      Kommentar


      • #4
        Zitat von piratos Beitrag anzeigen
        PHP 5.2.10 - das public muss weg.
        ??? Wieso das denn?

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Zitat von Kropff Beitrag anzeigen
          ??? Wieso das denn?
          Weil piratos die Objekt-Methode, die das ursprünglich offenbar wohl mal war, aus dem Kontext gerissen, und eine normale Funktion draus gemacht hat ...
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Zitat von piratos Beitrag anzeigen
            PHP 5.2.10 - das public muss weg.
            Blödsinn. Offenbar handelt es sich um den Konstruktor einer Klasse, und da gehört das public schon hin.
            Zuletzt geändert von h3ll; 19.07.2009, 17:32.

            Kommentar


            • #7
              Also noch mal im Detail für piratos:
              PHP-Code:
              <?php
              class DBClass
              {
                public function 
              __construct($dbhost$dbuser$dbpw$dbname$dbport null) {
                  if (
              $dbport === null) {
                      
              $dbport ini_get('mysqli.default_port');
                  }
                }
              }
              ?>
              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Der Grund war mir schon klar.

                Ein Beispiel dafür das man Eingangsfragen komplett posten sollte wenn es um Codebeispiele geht.

                Kommentar


                • #9
                  Zitat von piratos Beitrag anzeigen
                  Der Grund war mir schon klar.

                  Ein Beispiel dafür das man Eingangsfragen komplett posten sollte wenn es um Codebeispiele geht.
                  War ja klar ersichtlich, dass es sich um den Konstruktor einer Klasse handelt.

                  Kommentar


                  • #10
                    Ja sicher doch.

                    Aber wie vielen anderen wohl nicht - die nicht soweit sind.

                    Deshalb wäre es wünschenswert wenn Postings in der Anfangsfrage nicht zu sehr aus dem Zusammenhang (code) gerissen werden, dann haben auch noch mehr andere etwas davon.

                    Kommentar


                    • #11
                      Offenbar handelt es sich um den Konstruktor einer Klasse, und da gehört das public schon hin.
                      Da fällt mir noch ein probiert das doch mal aus:

                      Code:
                      <?php
                      class DBClass
                      {  var $db;
                         function __construct($dbhost, $dbuser, $dbpw, $dbname, $dbport = null) {
                          if ($dbport === null) {
                              $dbport = ini_get('mysqli.default_port');
                          }
                              $this->db=mysqli_connect($dbhost, $dbuser, $dbpw,$dbname);
                              echo 'Hallo <br />';
                        }
                      }
                      $dbc= new DBClass('localhost','root','','leipzigtest');
                      var_dump($dbc->db);
                      ?>
                      Ergebnis:

                      Code:
                      Hallo 
                      object(mysqli)#2 (0) { }

                      Kommentar


                      • #12
                        In dem public Zusammenhang beachte man die zahlreichen Klasenbeispiele hier:

                        PHP: Classes and Objects (PHP 5) - Manual

                        Kommentar


                        • #13
                          Zitat von piratos Beitrag anzeigen
                          Da fällt mir noch ein probiert das doch mal aus:

                          Code:
                          <?php
                          class DBClass
                          {  var $db;
                             function __construct($dbhost, $dbuser, $dbpw, $dbname, $dbport = null) {
                              if ($dbport === null) {
                                  $dbport = ini_get('mysqli.default_port');
                              }
                                  $this->db=mysqli_connect($dbhost, $dbuser, $dbpw,$dbname);
                                  echo 'Hallo <br />';
                            }
                          }
                          $dbc= new DBClass('localhost','root','','leipzigtest');
                          var_dump($dbc->db);
                          ?>
                          Ergebnis:

                          Code:
                          Hallo 
                          object(mysqli)#2 (0) { }
                          var ist PHP 4 Syntax und sollte man nicht mehr verwenden. Vor allem mischst du hier PHP 5 Syntax (__construct) mit PHP 4 Syntax (var). Läuft also so oder so nicht unter PHP 4 und unter PHP 5 macht es keinen Sinn, bzw. erzeugt sogar einen E_STRICT Fehler.

                          Kommentar


                          • #14
                            Anscheinend wird laut php.de public nicht vor __construct gesetzt. Es gibt ja aber, im Falle von Singletons, auch die Möglichkeit, __construct private zu setzen, was verhindern soll, dass ein Objekt nochmals instantiiert wird.

                            Kommentar


                            • #15
                              Zitat von piratos Beitrag anzeigen
                              Da fällt mir noch ein probiert das doch mal aus:

                              Code:
                              <?php
                              class DBClass
                              {  var $db;
                                 function __construct($dbhost, $dbuser, $dbpw, $dbname, $dbport = null) {
                                  if ($dbport === null) {
                                      $dbport = ini_get('mysqli.default_port');
                                  }
                                      $this->db=mysqli_connect($dbhost, $dbuser, $dbpw,$dbname);
                                      echo 'Hallo <br />';
                                }
                              }
                              $dbc= new DBClass('localhost','root','','leipzigtest');
                              var_dump($dbc->db);
                              ?>
                              Ergebnis:

                              Code:
                              Hallo 
                              object(mysqli)#2 (0) { }
                              In diesem Zusammenhang stellt sich mir noch eine andere Frage. Wieso trägt das mysqli-Objekt die Nummer 2, ist es doch die erste im Skript aufgerufene Instanz. Ist mir schon an anderen Orten aufgefallen.

                              Kommentar

                              Lädt...
                              X