PHP:调用函数的对象中的对象

PHP:调用函数的对象中的对象,php,oop,Php,Oop,我是PHP OOP新手,但对PHP不太熟悉,我想开始学习。。撞到了几堵砖墙,但这一堵难住了我。。但是因为我在网上找不到任何问题。。我也找不到答案 所以。。代码。。如果我能理解的话,我把它简化为它的核心问题 <?php class wallet { public $Money = 5; public function Add($mMoney) { $this->Money += $mMoney; echo "added $mM

我是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();

?>


为什么toWallet不起作用?为什么我不能访问$this->checkWallet()

ToWallet不起作用的原因是函数认为Add的echo是返回值。(这显然是一个字符串,在计算中是无用的)。ammoney变量需要有一个return命令。尝试在Add函数中键入类似的内容

public function Add($mMoney) {
        $this->Money += $mMoney;
        echo "added $mMoney to Wallet";
        return $mMoney;
        }

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

对于将来遇到这种情况的人来说。。解决方案如下:

第一:当你有一个对象时,不要将数据回显或打印到屏幕上,而是将其返回给父对象来为你做这件事

第二:再次检查所有变量是否仅为函数,即$wallet,或者是对象变量$this->wallet,因为即使我盯着代码看了几个小时,我也看不出这不是同一个变量


对于OOP来说是个新手,多么混乱的思想是行不通的?无法访问?请注意解释您的问题,不要只是将代码放在这里等待修复。请尝试在
$this->Wallet->Add($toAdd)中用大写字母“a”写入函数名它在Windows机器上,不在乎大写与否,重点似乎是函数的范围比普通的全局变量或函数变量更难理解。。我通过在类中声明变量来理解,它可以用$this引用。。但是在这种情况下。。它没有看到它,或者返回,没有变量,我剪切粘贴了它,这样它就可以完整地运行,只需将它的全部复制粘贴到一个空白的php中并运行它。。对不起阿尔瓦罗,我觉得这是目前这样一个网站的规范。。剪切粘贴问题,这样任何人都可以将其剪切粘贴到一个空白的php文件中,并从自己的PC上运行,查看问题是否有效。。如果您这样做,您将看到“向钱包中添加钱”不起作用。。在一个无法运行第二类函数的类中创建一个范围内类的想法。。很抱歉,它本身不是那么明显,我认为它是一个新手MSTACK,任何人都会发现它的。嗯,这可能很有趣,但我不想把钱退还给其他任何东西。。我试图理解物体的本质,以及容纳物体的物体。。这里我们有一个对象人,有一个对象钱包,我想要一个功能,从对象人那里向对象钱包中添加钱,然后我想要能够访问钱包,查看钱包中有多少钱。。这与示例无关,仅仅是如何“看到”对象内部的信息,而对象本身就是另一个对象的内部..啊,谢谢Redelman,这是回报,但不是为了钱,而是为了检查。。我试图把它放在屏幕上,而不是放在另一个物体上