如何在类之间操纵私有变量

时间:2015-12-30 07:42:11

标签: php oop

我正在尝试建立库存和收银机模拟,在我有2个类的代码中,首先是Inventory,第二个是Cash。两者都有自己的属性和方法。

当我尝试销售商品时,_balance商家正在提供Error undefined _balance_balance仍为0

我该如何解决?如果已经问过这个问题,请给链接不要标记为重复。我找不到它。

<?php
        class Inventory {
            public $_name;
            public $_price;
            public $_stock;
            public function _addStock($item,$itemIn)
            {
                $this->_stock += $itemIn;
            }
        };

        $item2 = new Inventory;
        $item2->_name = "item2";
        $item2->_price = 5000;
        $item2->_addStock('item2',100);
        $item1 = new Inventory;
        $item1->_name = "item1";
        $item1->_price = 1000;
        $item1->_addStock('item1',100);

        class Cash {
            private $_balance = 0;
            public function _display(Inventory $_name)
            {
                echo $_name->_price;
            }
            public function getBalance()
            {
                echo $this->_balance;
            }
            public function sell(Inventory $_name, $amount)
            {   
                return $_name->_stock -= $amount;

                return $_balance += $_name->_price*$amount;// Error $_balance undifined
            }    
        };
        $cash = new Cash;
        print_r($item2);
        echo "<br/>";
        print_r($item1);
        echo " <br/>Balance :<br/>";
        $cash->getBalance();
        echo "<br/>item1 price :<br/>";
        $cash->_display($item1);
        echo "<br/>item2 price :<br/>";
        $cash->_display($item2);
        echo "<br/>item1 sold 12 pcs<br/>";
        $cash->sell($item1,12);

        $cash->sell($item2,12);
        echo "<br/>item2 sold 12 pcs <br/>";

        echo "<br/> current stock :<br/>";
        print_r($item2);
        echo "<br/>";
        print_r($item1);

        echo "<br/> current balance :<br/>";
        $cash->getBalance();
        ?>

1 个答案:

答案 0 :(得分:4)

Cash班级,sell方法中,您有两次返回。

你得到的错误是因为你忘记了$this,所以php是正确的抱怨,变量$balance尚未定义。

public function sell(Inventory $_name, $amount){   

        $_name->_stock -= $amount;
        return $this->_balance += $_name->_price*$amount;// this clears the error
    }