web-dev-qa-db-ja.com

クラスを「エコー」する方法は?

これはおそらく本当に簡単ですが、クラスを印刷/エコーする方法がわからないようですので、詳細を知ることができます。

私はこれが機能しないことを知っていますが、これは私がやろうとしていることです:

<?php echo $class; ?>

このようなことを達成するための正しい方法は何ですか?

13
Andrew

デバッグ目的でクラスの内容を出力するだけの場合は、 print_r または var_dump

18
James McNellis

toString メソッドをクラスに追加してみてください。次に、いくつかの有用な情報をエコーするか、renderメソッドを呼び出して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;
?>
25

クラスのインスタンスでvar_dumpを使用します。

<?php
$my_class = new SomeClass();
var_dump( $my_class );
?>
5
Luc M

クラスからより詳細な情報を取得するには(たとえば、子クラスで何が利用できるかを知りたい場合)、debug()メソッドを追加できます。

これは、メソッド、デフォルト変数、インスタンス変数を構造化された方法で出力する、私が使用するようなメソッドを持つクラスの例です。

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

Symfony VarDumperコンポーネントを使用できます 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
Alexander Sholk