Как «повторить» класс? - PullRequest
       12

Как «повторить» класс?

12 голосов
/ 25 октября 2009

Это, вероятно, действительно просто, но я не могу понять, как напечатать / отобразить класс, чтобы узнать некоторые подробности об этом.

Я знаю, что это не работает, но вот что я пытаюсь сделать:

<?php echo $class; ?>

Как правильно достичь чего-то подобного?

Ответы [ 5 ]

25 голосов
/ 25 октября 2009

Вы можете попробовать добавить метод toString в ваш класс. Затем вы можете получить некоторую полезную информацию или вызвать метод рендеринга для генерации HTML или чего-то еще!

Метод __toString вызывается, когда вы делаете что-то вроде следующего:

echo $class;

или

$str = (string)$class;

Пример связан со следующим:

<?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;
?>
17 голосов
/ 25 октября 2009

Если вы просто хотите распечатать содержимое класса для целей отладки, используйте print_r или var_dump.

5 голосов
/ 25 октября 2009

Используйте var_dump для экземпляра вашего класса.

<?php
$my_class = new SomeClass();
var_dump( $my_class );
?>
0 голосов
/ 22 ноября 2015

Вы можете использовать Symfony VarDumper Component http://symfony.com/doc/current/components/var_dumper/introduction.html:

Установите его через Composer:

composer require symfony/var-dumper 

Использование:

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

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

dump($someVar);
0 голосов
/ 05 августа 2014

Чтобы получить более подробную информацию о вашем классе (например, если вы хотите узнать, что доступно для дочернего класса), вы можете добавить метод debug().

Вот пример класса с таким методом, который я использую, который распечатывает методы, переменные по умолчанию и экземпляры переменных в хорошей структурированной форме:

<code><?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 "
"; } } класс TestClassChild extends TestClass { публичная функция __construct () { $ this-> privateVar = 'child instance'; } } $ test = new TestClass (); $ test2 = new TestClassChild (); $ Test-> отладки (); $ Test2-> отладки ();
...