【问题标题】:PHP class - return object but echo stringPHP 类 - 返回对象但回显字符串
【发布时间】:2013-11-03 12:59:13
【问题描述】:

我有一堂课CalculatePrice。运行此代码:

$calc = new CalculatePrice( 10, 20 );
print_r ( $calc->do() );

do() 方法返回一个名为PriceObj 的不同类。如果我运行代码echo $calc->do(),则会收到错误消息:PriceObj 类的对象无法转换为字符串

我的问题是:我怎样才能仍然从do() 方法返回一个对象,但是当对它运行回显时,它返回一个字符串甚至更简单;对或错?这可能吗?

【问题讨论】:

  • 能贴出代码吗?
  • 只需编写 return $calc->do() 并在您的代码中回显所需的属性或调用其函数之一(并且该函数将 echo 您想要的)

标签: php class


【解决方案1】:

当对象可以使用__toString() 方法转换为字符串时,这是可能的:

class A {
    private $val;

    public function __construct($myVal) {
       $this->val = $myVal;
    }

    public function __toString() {
       return "I hold ".$this->val;
    }
}

$obj = new A(4);
echo $obj; // will print 'I hold 4';

【讨论】:

  • 太棒了。不知道这个神奇的方法 - 非常感谢。
【解决方案2】:

您只能回显字符串。但幸运的是,您可以将对象转换为字符串。这可以通过提供__toString() 函数自动完成

这是一种神奇的方法,可以完全满足您的要求:从对象中创建一个字符串。见:http://www.php.net/manual/en/language.oop5.magic.php#object.tostring

基本的事情是你是唯一知道如何从对象中生成字符串(例如显示内部的全部或部分变量)的人,所以你需要自己实现如何构建字符串。

【讨论】:

  • 我现在已经实现了这个并且它可以工作。非常感谢!
【解决方案3】:

在您的PriceObj 上实施魔术方法__toString()

所以:

public function __toString()
{
    echo $this->result; // The calculated price
}

http://php.net/manual/en/language.oop5.magic.php

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 2015-10-01
    • 2015-09-17
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多