PHP:Object中的Object调用Function

时间:2012-07-17 09:55:43

标签: php oop

我是PHP OOP的新手,但对PHP来说并不多,想要开始学习..并且打了几个砖墙,但这个让我难过..但是因为我在任何地方找不到任何问题网...我找不到答案..

所以......代码..如果我能理解的话,我把它简化为核心问题......

    <?php

class wallet {
    public $Money = 5;

    public function Add($mMoney) {
        $this->Money += $mMoney;
        echo "added $mMoney to Wallet";
        }
    public function take($mMoney) {
        $this->Money -= $nMoney;
        }
    public function check() {
        echo $this->Money;
        echo "Check?";
    } 

    public function __get($var) {
      echo "trying to get $var and Failing";

    }       

}

class person {
    public $Name;
    public $Wallet;
    public $Purse;
    public $Cash;

    public function __construct($name, $cash) {

        $this->Wallet = new wallet();
        $this->Purse = new wallet();
        $this->Name = $name;
        $this->Cash = $cash;
    }

    public function status() {
       echo "<br><table border = 1><tr><td>".$this->Name."</td><td> Wallet?</td><td> Purse </td></tr>
       <tr><td> $ ".$this->Cash."</td><td>".$this->checkWallet()."<td>22</td></tr></table>";

    }

    public function toWallet($toAdd)  {
       $this->Wallet->add($toAdd);

    }

    public function checkWallet() {
       echo $this->Wallet->check();

    }

}

$bob = new person ("Bob", 10);
$sarah = new person ("Sarah", 20);

$bob->status();
$sarah->status();

$bob->toWallet(10);

$bob->status();
$sarah->status();

?>

为什么不工作?为什么我不能访问$ this-&gt; checkWallet()..

2 个答案:

答案 0 :(得分:1)

ToWallet无法工作的原因是因为函数认为Add的回显是返回值。 (这显然是一个字符串,在计算中没用)。需要有一个mMoney变量的return命令。尝试在添加功能

中输入类似的内容
public function Add($mMoney) {
        $this->Money += $mMoney;
        echo "added $mMoney to Wallet";
        return $mMoney;
        }

我不知道其他人是怎么发现的。

答案 1 :(得分:0)

对于将来遇到这种情况的任何人来说。这是解决方案:

首先:当你有一个Object时,不要将数据回显或打印到屏幕上,将它返回给父对象为你做这个,

第二:仔细检查所有变量是否只是函数,即$ wallet,或者是对象变量$ this-&gt; wallet,因为即使我盯着代码几个小时,我也看不出这不是相同的变量..

对于OOP来说,这是一个多么令人头疼的问题