php OOP对象/分类的返回值



假设我有以下代码,

$obj = new foo();
echo $obj;

class foo {
    public function __construct()
    {
        return 'a';
    }
}

如何使$obj回显字符串"a"?

如何使$obj引用或等于对象/类返回的值?

需要从__construct()返回一个值,还需要在另一个类中返回一个普通的私有函数。例如:

$obj2 = new foo2();
echo $obj2;

class foo2 {
    public function __construct()
    {
        bar();
    }
    private bar() 
    {
        return 'a';
    }
} 

谢谢!

您可以使用magic__toString()方法将类转换为表示字符串。您不应该在构造函数中返回某些内容,如果您尝试将实例用作字符串(在echo的情况下),则会自动调用__toString()。

来自php.net:

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

http://www.php.net/manual/en/language.oop5.magic.php#object.tostring

PHP中的构造函数更像初始化函数;它们的返回值没有被使用,这与例如JavaScript不同。

如果你想改变对象的正常回声方式,你需要提供神奇的__toString()方法:

class foo 
{
    private $value;
    public function __construct()
    {
        $this->value = 'a';
    }
    public function __toString()
    {
        return $this->value;
    }
}

返回值的私有方法可以以类似的方式使用:

class foo2
{
    private function bar()
    {
        return 'a';
    }
    public function __toString()
    {
        return $this->bar();
    }
}

最新更新