| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

19-07-2009, 15:34
|
|
tim-gt
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 52
|
|
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:
Parse error: parse error, expecting `')'' in xxx.php on line 55
|

19-07-2009, 16:08
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
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'); } /*...*/ }
|

19-07-2009, 16:53
|
|
|
Code:
<?php
public function __construct($dbhost, $dbuser, $dbpw, $dbname, $dbport = null) {
if ($dbport === null) {
$dbport = ini_get('mysqli.default_port');
}
}
?>
Zitat:
|
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.
|

19-07-2009, 17:10
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Zitat:
Zitat von piratos
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
|

19-07-2009, 17:25
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Kropff
??? 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.
|

19-07-2009, 17:29
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von piratos
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.
Geändert von h3ll (19-07-2009 um 17:32 Uhr)
|

19-07-2009, 17:32
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
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
|

19-07-2009, 17:49
|
|
|
 Der Grund war mir schon klar.
Ein Beispiel dafür das man Eingangsfragen komplett posten sollte wenn es um Codebeispiele geht.
|

19-07-2009, 17:52
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von piratos
 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.
|

19-07-2009, 17:59
|
|
|
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.
|

19-07-2009, 18:12
|
|
|
Zitat:
|
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) { }
|

19-07-2009, 18:35
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von piratos
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.
|

19-07-2009, 18:43
|
|
tim-gt
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 52
|
|
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.
|

19-07-2009, 18:44
|
|
tim-gt
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 52
|
|
Zitat:
Zitat von piratos
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.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|