在PHP中调用子方法有可能吗?

时间:2015-03-13 16:30:58

标签: php

我不确定这是怎么命名的,但我已经在C#中看到了类似的东西:

decimal value = 12.01;
print obj->getAmount() // 1002.01
print obj->getAmount()->format('...'); // 1.002,01

所以,在PHP上我试过了类似的东西:

class Account {
    public function getAmount() {
        return new Decimal($this->_amount);
    }
}

class Decimal {

    private $_value;

    public function __construct($value) {
        $this->_value = $value;
        return (float) $this->_value;
    }

    public function format() {
        return number_format($this->_value, 2, ',', '.');
    }

}

哪里可以通过两种方式获得价值:

$account->getAmount() // 1002.01
$account->getAmount()->format() // 1.002,01

但是,如果这是可能的,我会说缺少某些东西而且我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

PHP无法将对象转换为浮点数或整数,只能转换为字符串。这可用于显示目的:

class Account {

    public function __construct($amount) {
        $this->_amount = $amount;
    }
    public function getAmount() {
        return new Decimal($this->_amount);
    }
}

class Decimal {

    private $_value;

    public function __construct($value) {
        $this->_value = $value;
    }
    public function __toString() {
        return strval($this->_value);
    }
    public function format() {
        return number_format($this->_value, 2, ',', '.');
    }
}

$account = new Account(1002.01);

echo $account->getAmount(), "\n"; // 1002.01
echo $account->getAmount()->format(), "\n"; // 1.002,01

但不要尝试做任何其他事情:

echo $account->getAmount() + 42; // 'Object of class Decimal could not be converted to int'

答案 1 :(得分:0)

在Account类中,您需要公布$ ammount变量 删除变量名称中的下划线

您需要在创建方法之前创建对象。