Robin
Robin

Reputation: 59

How to manipulate private variable between classes

I'm trying to build a stock inventory and cash register simulation, in the code I have 2 class, first is Inventory and second is Cash. Both have their own properties and method.

When I'm trying to sell item the _balance property is giving Error undefined _balance and the _balance is still 0.

How should I fix it? Just in case this question have been already asked please just give the link don't mark as duplicate. I just can't find it.

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

Upvotes: 0

Views: 66

Answers (1)

Alex Andrei
Alex Andrei

Reputation: 7283

In the Cash class, sell method you have two returns.

The error you get is because you forgot about $this, so php is right to complain, the variable $balance has not been defined.

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

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

Upvotes: 3

Related Questions