2012-03-28 2 views
1

Im Moment habe ich eine Funktion, wo ich auf die $ id in der Klasse zu verweisen ich versucht, aber es funktioniert nicht:Wie beziehe ich mich auf einen "dieser" Klassenmember in einem Funktionsparameter?

public function getCourseInfo($cid = $this->id, $all = false) 
{ 

} 

Das ist meine Klasse:

class Course 
{ 
    protected $course; 
    protected $id; 

    public function __construct($cid) 
    { 
     $id = $cid; 
     $this->course = $this->getCourseInfo($this->id); 
    } 
    public function getCourseInfo($cid = $this->id, $all = false) 
    { 

    } 
} 
+0

Ich nehme an, er versucht, einen Standardwert für das erste Argument mit der ID des Objekts zu setzen? ** Shrugs ** –

+1

Würden Sie nicht einfach eine überladene Funktion machen, die keine ID benötigt? dann standardmäßig auf die Objekt-ID –

+0

Wenn nur PHP True Überladung unterstützt :-((Ja, dieses spezielle Beispiel kann mit optionalen Argumenten approximiert werden, aber im Allgemeinen steht meine Beschwerde!) – cmbuckley

Antwort

0

Jeder in diesem Thread richtige Antworten ist zu geben, aber niemand gab daher ein vollständiges Codebeispiel ich meinen Vorschlag schreiben würde:

Wie Sie feststellen werden, habe ich den Kurs-ID-Parameter von getCourseInfo() weggelassen, weil er nicht benötigt wird, wenn Sie die Klasse mit einer Kurs-ID instanziieren.

Zweitens, ich denke nicht, dass Sie getCourseInfo im Konstruktor aufrufen sollten, weil die Informationen nur zu einem späteren Zeitpunkt benötigt werden. Außerdem habe ich der Funktion "Caching" hinzugefügt, damit Sie die Daten nicht zweimal abrufen.

Offensichtlich gibt es eine hohe Wahrscheinlichkeit, dass ich falsch liegen könnte, wenn ich Ihren Code nicht gesehen habe, aber ich denke, das ist eine bessere Struktur des Codes.

1

Sie haven‘ Ich habe $ this-> id noch eingerichtet. :)

falsch

$id = $cid; 

rechts

$this->id = $cid; 

Sie sind auch eine schließende geschweifte Klammer-auf Ihrer Klasse fehlt.

+0

Funktioniert immer noch nicht = ( –

+1

Zeit zu sprengen beginnen aus der guten alten var_dump()! Werfen Sie auch Fehlermeldungen? Können Sie zeigen, wie Sie das Objekt erstellen? Benötigen Sie weitere Informationen! :) –

+0

Es ist ein Syntaxfehler auf "$ this" auf der eigentlichen Funktion. Nicht wann Ich rufe es an –

0

Sie müssen die $ id zuerst in Ihrem Konstruktor setzen.

class Course 
{ 
    protected $course; 
    protected $id; 
} 

public function __construct($cid) 
{ 
    $this->id = $cid; 
    $this->course = $this->getCourseInfo($id); 
} 
0

Versuchen Sie, diese

public function getCourseInfo($cid = 'default', $all = false) 
{ 
    $cid = $cid == 'default' ? $this->id : $cid; 

} 

Oder benötigen Sie completey Änderung Ihrer Klasse

class Course 
{ 
    protected $course; 
    protected $id; 

    public function __construct($cid) 
    { 
     $this->id = $cid; 
     $this->course = $this->getCourseInfo(); 
    } 

    public function getCourseInfo($course_id = 0, $all = false) 
    { 
     $course_id = !$course_id ? $this->id : $course_id; 
     //do Somthing with 
     //return var; 
    } 
0

Nein, das ist nicht möglich, da auf der Function arguments manual page erklärte:

The default value must be a constant expression, not (for example) a variable, a class member or a function call.

Stattdessen könnten Sie entweder einfach ly in null als Standard übergeben und diese ...

in Ihrer Funktion aktualisiert
class Course 
{ 
    protected $course; 
    protected $id; 

public function __construct($cid) 
{ 
    $this->id = $cid; 
    $this->course = $this->getCourseInfo($this->id); 
} 
    function getCourseInfo($cid = null, $all = false) { 
     $cid = isset($cid) ? $cid : $this->id; 
     .... 
    } 
} 
Verwandte Themen