2009-10-24 17 views
10

Questo è probabilmente molto semplice, ma non riesco a capire come stampare/echo una classe in modo da poter trovare alcuni dettagli a riguardo.Come "echo" una classe?

So che questo non funziona, ma questo è quello che sto cercando di fare:

<?php echo $class; ?> 

Qual è il modo corretto per ottenere qualcosa di simile?

+0

Non ha senso mostrarci il codice che non funziona. Non possiamo estrapolare da ciò ciò che vuoi fare, perché il codice non funziona: per definizione, non descrive cosa vuoi fare. Non ha significato. Quindi, descrivi (o spiega in inglese) l'output che desideri. –

risposta

16

Se si desidera solo per stampare i contenuti della classe a scopo di debug, utilizzare print_r o var_dump.

+0

+1 per la velocità :-) –

+6

ottengo +1 per la velocità? –

+0

così velocemente la risposta che stavo per accettare era già stata cancellata per essere un duplicato – Andrew

24

Si potrebbe provare ad aggiungere un metodo toString alla classe. È quindi possibile echo alcune informazioni utili o chiamare un metodo di rendering per generare HTML o qualcosa del genere!

Il metodo __toString viene chiamato quando si fa qualcosa di simile al seguente:

echo $class; 

o

$str = (string)$class; 

L'esempio collegata è la seguente:

<?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

come sei stato il primo a rispondere, hai 2 :) –

5

Utilizzare var_dump su un'istanza della classe.

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

-1 per lentezza .. jk –

0

Per ottenere informazioni più dettagliate dalla vostra classe (se volete sapere cosa è disponibile ad una classe figlia, per esempio), è possibile aggiungere un metodo debug().

Ecco una classe di esempio con un tale metodo che uso che stampa i metodi, VAR di default, e l'istanza vars in un bel modo strutturato:

<?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

È possibile utilizzare Symfony VarDumper Componente http://symfony.com/doc/current/components/var_dumper/introduction.html:

Installarlo via Composer:

composer require symfony/var-dumper 

Usage:

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

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

dump($someVar); 
+0

La domanda non è codificata in Symfony, bro. –

+0

Questo componente può essere utilizzato in qualsiasi progetto. –