2009-10-24 11 views
10

Esto es probablemente muy fácil, pero parece que no puedo entender cómo imprimir/repetir una clase para poder encontrar algunos detalles al respecto.¿Cómo "eco" una clase?

Sé que esto no funciona, pero esto es lo que estoy tratando de hacer:

<?php echo $class; ?> 

Cuál es la forma correcta para lograr algo como esto?

+0

No tiene sentido mostrarnos el código que no funciona. No podemos extrapolar lo que quiere hacer, porque el código no funciona: por definición, _no_ describe lo que quiere hacer. No tiene significado. Por lo tanto, describa (o explique en inglés) el resultado que desea. –

Respuesta

16

Si lo que desea para imprimir los contenidos de la clase con fines de depuración, use print_r o var_dump.

+0

+1 por velocidad :-) –

+6

¿Obtengo +1 por velocidad? –

+0

tan rápido la respuesta que iba a aceptar ya había sido eliminada por ser un duplicado – Andrew

24

Puede intentar agregar un método toString a su clase. ¡Entonces puede hacer eco de información útil, o llamar a un método de renderizado para generar HTML o algo así!

El método __toString se llama cuando se hace algo como lo siguiente:

echo $class; 

o

$str = (string)$class; 

El ejemplo relacionado es el siguiente:

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

como fue el primero en responder, tienes 2 :) –

5

Use var_dump en una instancia de su clase.

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

-1 por lentitud .. jk –

0

Para obtener información más detallada de su clase (si usted quiere saber lo que está disponible a una clase hija, por ejemplo), puede agregar un método debug().

Aquí es una clase de ejemplo con un procedimiento de este tipo que yo uso que imprime los métodos, VARs por defecto, y la instancia vars en una bonita forma estructurada:

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

Puede utilizar Symfony VarDumper Componente http://symfony.com/doc/current/components/var_dumper/introduction.html:

Instalar vía Compositor:

composer require symfony/var-dumper 

Uso:

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

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

dump($someVar); 
+0

La pregunta no está etiquetada en Symfony, hermano. –

+0

Este componente se puede usar en cualquier proyecto. –

Cuestiones relacionadas