2009-10-24 5 views
10

C'est probablement très facile, mais je n'arrive pas à comprendre comment imprimer/faire écho une classe, donc je peux trouver quelques détails à ce sujet.Comment "faire écho" une classe?

Je sais que cela ne fonctionne pas, mais ce que je suis en train de faire:

<?php echo $class; ?> 

Quelle est la bonne façon de réaliser quelque chose comme ça?

+0

Il est inutile de nous montrer le code qui ne fonctionne pas. Nous ne pouvons pas en extrapoler ce que vous voulez faire, car le code ne fonctionne pas: par définition, il ne décrit pas ce que vous voulez faire. Cela n'a aucun sens. Alors, décrivez (ou expliquez en anglais) la sortie que vous voulez. –

Répondre

16

Si vous voulez juste pour imprimer le contenu de la classe à des fins de débogage, utilisez print_r ou var_dump.

+0

+1 pour la vitesse :-) –

+6

Est-ce que je reçois +1 pour la vitesse? –

+0

si vite la réponse que j'allais accepter avait déjà été supprimé pour être un doublon – Andrew

24

Vous pourriez essayer d'ajouter une méthode toString à votre cours. Vous pouvez ensuite faire écho à des informations utiles, ou appeler une méthode de rendu pour générer du HTML ou quelque chose!

La méthode __toString est appelée lorsque vous faites quelque chose comme ce qui suit:

echo $class; 

ou

$str = (string)$class; 

L'exemple lié est la suivante:

<?php 
// Declare a simple class 
class TestClass 
{ 
    public $foo; 

    public function __construct($foo) { 
     $this->foo = $foo; 
    } 

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

$class = new TestClass('Hello'); 
echo $class; 
?> 
+1

comme vous étiez le premier à répondre, vous avez 2 :) –

5

Utilisez var_dump sur une instance de votre classe.

<?php 
$my_class = new SomeClass(); 
var_dump($my_class); 
?> 
+0

-1 pour la lenteur .. jk –

0

Pour obtenir des informations plus détaillées sur votre classe (si vous voulez savoir ce qui est disponible à une classe d'enfants par exemple), vous pouvez ajouter une méthode debug().

Voici un exemple de classe avec une telle méthode que j'utilise qui imprime les méthodes, vars par défaut, et l'instance vars de manière structurée agréable:

<?php 
class TestClass{ 
    private $privateVar = 'Default private'; 
    protected $protectedVar = 'Default protected'; 
    public $publicVar = 'Default public'; 

    public function __construct(){ 
     $this->privateVar = 'parent instance'; 
    } 
    public function test(){} 
    /** 
    * Prints out detailed info of the class and instance. 
    */ 
    public function debug(){ 
     $class = __CLASS__; 
     echo "<pre>$class Methods:\n"; 
     var_dump(get_class_methods($class)); 
     echo "\n\n$class Default Vars:\n"; 
     var_dump(get_class_vars($class)); 
     echo "\n\n$class Current Vars:\n"; 
     var_dump($this); 
     echo "</pre>"; 
    } 
} 

class TestClassChild extends TestClass{ 
    public function __construct(){ 
     $this->privateVar = 'child instance'; 
    } 
} 

$test = new TestClass(); 
$test2 = new TestClassChild(); 

$test->debug(); 
$test2->debug(); 
0

Vous pouvez utiliser Symfony VarDumper Component http://symfony.com/doc/current/components/var_dumper/introduction.html:

Installer via Compositeur:

composer require symfony/var-dumper 

Utilisation:

require __DIR__.'/vendor/autoload.php'; 

// create a variable, which could be anything! 
$someVar = ...; 

dump($someVar); 
+0

La question n'est pas étiquetée sous Symfony, bro. –

+0

Ce composant peut être utilisé dans n'importe quel projet. –

Questions connexes