【问题标题】:How to "echo" a class?如何“呼应”一堂课?
【发布时间】:2009-10-24 23:27:03
【问题描述】:

这可能真的很简单,但我似乎不知道如何打印/回显一个类,所以我可以找到一些关于它的细节。

我知道这行不通,但这就是我想要做的:

<?php echo $class; ?>

实现这样的事情的正确方法是什么?

【问题讨论】:

  • 向我们展示不起作用的代码毫无意义。我们无法从中推断您想要做什么,因为代码不起作用:根据定义,它确实描述了您想要做什么。它没有任何意义。所以,描述(或用英语解释)你想要的输出。

标签: php tostring


【解决方案1】:

您可以尝试在您的课程中添加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;
?>

【讨论】:

  • 正如你第一个回答的那样,你有 2 个 :)
【解决方案2】:

如果您只想打印类的内容以进行调试,请使用print_rvar_dump

【讨论】:

  • 这么快我要接受的答案已经因为重复而被删除了
  • var_export 优于两者。
【解决方案3】:

在您的类的实例上使用 var_dump。

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

【讨论】:

    【解决方案4】:

    要从您的课程中获取更详细的信息(例如,如果您想知道子课程可用的内容),您可以添加 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();
    

    【讨论】:

      【解决方案5】:

      你可以使用 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);
      

      【讨论】:

      • 这个问题没有被标记在 Symfony 下,兄弟。
      • 这个组件可以在任何项目中使用。
      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2014-12-05
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多