2016-08-03 34 views
0

Ich habe Probleme beim Aufruf einer Funktion innerhalb einer Klasse __construct.PHP - Aufruf einer Funktion innerhalb eines Objekts führt zu einem Fehler: 'Aufruf an eine Mitgliedsfunktion query() für eine Ganzzahl in'

Die Funktion:

function dbcom_query($con,$query) { 
    if (!$mysqli_result = $con->query($query)) dbcom_error(); 
    return $mysqli_result; 
} 

Und die Klasse:

class User { 

    public $id; 
    public $con; 
    public $full_name; 
    public $disp_name; 

    public function __construct($id,$con) { 
     $query = "SELECT * FROM user_1;"; 
     $result = dbcom_query($con, $query); 
     if ($result) { 
      $usr_array = mysqli_fetch_assoc($result); 
      $this->full_name = $usr_array['full_name']; 
      $this->disp_name = $usr_array['disp_name']; 
     } 
    } 
} 
  • ich die user_ setzen in der Abfrage einen Zweifel darüber, wie die Abfrage sein Build zu mildern . Sonst wäre es $ ID.

Aber dann bekomme ich diesen Fehler, nicht sicher, was los ist:

Aufruf einer Member-Funktion query() auf integer in ... 'x' Linie

Wo ' x'-line ist: $query = "SELECT * FROM user_1;";

Und, wenn ich diese Funktion dbcom_query() außerhalb jedes Objekts aufrufen, funktioniert es gut.

EDIT: wow, ich bin etwas beschämt ... Ich rief $user = new User($con,$id)" - falsche Parameter Reihenfolge. Was für ein dummer Fehler. Tut mir leid, Leute!

+0

$ query = "SELECT * FROM' user_1'"; –

+0

Scope, Scope, scope – RiggsFolly

+0

@Anant die ';' ist unnötig, aber ich glaube nicht, dass es einen Fehler verursacht – RiggsFolly

Antwort

0

Wenn Sie $ con in der Klasse aufrufen, handelt es sich um eine Ganzzahl. Stellen Sie sicher, dass Sie die Werte korrekt in die Klasse eingeben. Sie können die Funktion __constructor so umschreiben, dass sie wie folgt aussieht, wenn Sie eine Fehlerbehandlung hinzufügen möchten. Einfach die Klassennamen hinzufügen, wie so (Import Namespace, wenn es eine gibt):

public function __construct($id, ConnectionClass $con) { 
+0

Danke @Andrew. Es war in der Tat eine Ganzzahl, ich habe die Parameterreihenfolge beim Erstellen des Objekts durcheinander gebracht! –

0

Ich glaube, Sie einen Teil in der __construct Methode verpassen, innerhalb des lokalen $ con Wert das bereitgestellten $ con Objekt zu speichern:

public function __construct($id,$con) { 
     $this->con = $con; 
     $query = "SELECT * FROM user_1;"; 
     $result = dbcom_query($con, $query); 

     if ($result) { 
      $usr_array = mysqli_fetch_assoc($result); 
      $this->full_name = $usr_array['full_name']; 
      $this->disp_name = $usr_array['disp_name']; 
     } 

Aber das wirkliche Problem kann von der Art und Weise kommen, wie Sie das Objekt Benutzer erstellen. Bitte geben Sie den Teil "new User ($ foo, $ bar)" Ihres Codes an, um diesen Punkt zu sehen.

Allgemeiner Ich schlage vor, Sie definieren:

global $con; 

in Ihrer Skript beginnen, damit diese Variable von fast überall zugänglich sind.

Massives bearbeiten, sorry :)

+0

Danke @technico für die Hilfe. Als ich den 'neuen Benutzer' sehen wollte, sah ich, dass die Parameter invertiert waren ($ con, $ id). –

+0

Schön :) Noch ein Schritt zum Programmiererhimmel für uns beide! – technico