Unerklärlicher Parse-Fehler

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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');
        }
        
    /*...*/ 

    Comment


    • #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.

      Comment


      • #4
        Originally posted by piratos View Post
        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

        Comment


        • #5
          Originally posted by Kropff View Post
          ??? 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.

          Comment


          • #6
            Originally posted by piratos View Post
            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.
            Last edited by h3ll; 19-07-2009, 16:32.

            Comment


            • #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

              Comment


              • #8
                Der Grund war mir schon klar.

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

                Comment


                • #9
                  Originally posted by piratos View Post
                  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.

                  Comment


                  • #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.

                    Comment


                    • #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) { }

                      Comment


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

                        PHP: Classes and Objects (PHP 5) - Manual

                        Comment


                        • #13
                          Originally posted by piratos View Post
                          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.

                          Comment


                          • #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.

                            Comment


                            • #15
                              Originally posted by piratos View Post
                              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.

                              Comment

                              Working...
                              X