2012-03-28 4 views
3

Ich habe eine Klasse mit einem Konstruktor und einer toString-Methode erstellt, aber es funktioniert nicht.Warum kann ich nichts mit __toString() in PHP drucken?

class Course 
{ 
    protected $course 
    public function __construct() 
    { 
     $this->$course = "hello"; 
    } 

    public function __toString() 
    { 
     $string = (string) $this->$course; 
     return $string; 
    } 
} 

bekomme ich den Fehler:

Fatal error: Cannot access empty property 

, wenn ich nur tun:

$string = (string) $course; 

Nichts druckt.

Ich bin neu in magischen Methoden in PHP, obwohl ich mit der toString Methode von Java vertraut bin.

+0

Ich glaube, Sie (kopieren und einfügen :) gehen) bedeutete für der Titel zu lesen "kann nicht." –

Antwort

9

es einen kleinen Tippfehler in Ihrem Konstruktor ist, sollte es sein:

protected $course; 
public function __construct() 
{ 
    $this->course = "hello"; // I added $this-> 
} 

wenn Sie sich jetzt Ihre __toString() Funktion aufrufen, wird es drucken „Hallo“.

public function __toString() 
{ 
    return $this->course; 
} 

Ihr Gesamt Code dies würde:

aktualisieren
Sie sollten die __toString() Funktion wie folgt ändern

class Course 
{ 
    protected $course; 
    public function __construct() 
    { 
     $this->course = "hello"; 
    } 

    public function __toString() 
    { 
     return $this->course; 
    } 
} 
+0

Ich bekomme die gleiche Schwerwiegender Fehler: Kann jetzt nicht auf leere Eigenschaft Fehler zugreifen Es bezieht sich auf die Linie im Konstruktor. –

+0

Hm, das stimmt auch! – haltabush

+0

'$ this -> $ natürlich' in der _toString-Methode würde nur funktionieren, wenn es eine lokale '$ course'-Variable in dieser Methode gibt, so dass der Code immer noch gebrochen ist. Aber +1 zum Abfangen des Konstruktorfehlers. Zwischen dir und Haltabush hast du das Problem behoben. –

7

Sie haben die magische Methode in Ordnung verstanden, aber Sie haben hier einen Fehler: $ Natürlich ist nicht definiert.

Ihre Fehler auf dieser Linie ist:

$string = (string) $this-> $course; 

Es

$string = (string) $this->course; 

Sie wissen, in PHP könnte sein, dass Sie etwas tun können:

$course='arandomproperty'; 
$string = $this->$course; //that equals to $this->arandomproperty 

Hier $ course ist nicht definiert, daher wird standardmäßig '' '' '(und ein' NOTICE'-Fehler ausgegeben, den Sie mindestens während deve anzeigen oder protokollieren sollten wicklungs)


Edit:
Sie haben auch eine eror in Sie Konstruktor, sollten Sie $this->course='hello';


bearbeiten 2

Hier tun, ist ein Arbeitscode. Gibt es etwas, das du hier nicht verstehst?

<?php 
class Course 
{ 
    protected $course; 
    public function __construct() 
    { 
     $this->course = "hello"; 
    } 

    public function __toString() 
    { 
     $string = (string) $this->course; 
     return $string; 
    } 
} 
$course = new Course(); 
echo $course; 
+0

Ich habe alle Vorschläge versucht, aber es funktioniert immer noch nicht :(Ich verstehe wirklich nicht. –

+0

Befreien Sie sich von der $ $ this -> $ natürlich 'und ersetzen sie durch' $ this-> natürlich ' – haltabush

+0

wenn du sagst "nichts druckt aus" vielleicht verwendest du kein print oder echo? Versuch echo (string) $ natürlich; –