Properties not being defined by constructor
===

I've been trying to self-teach some OOP lately, and I came across something which seems curiously strange to me. I was wondering if someone can explain this to me.

I was inspired by one of the questions on this site to try out this little test piece of code (in PHP):

    class test1 {
        function foo ($x = 2, $y = 3) {
        return new test2($x, $y);
        }
    }
    
    class test2 {
        public $foo;
        public $bar;
        function __construct ($x, $y) {
            $foo = $x;
            $bar = $y;
        }
        function bar () {
            echo $foo, $bar;
        }
    }
    
    $test1 = new test1;
    $test2 = $test1->foo('4', '16');
    var_dump($test2);
    $test2->bar();
Simple stuff. `$test1` should return back an object to `$test2`, with `$test2->foo` equal to 4 and `$test2->bar` equal to 16. My problem with this is that, while `$test2` is being made into an object of class `test2`, both `$foo` and `$bar` within `$test2` are `NULL`. The constructor function is definitely being run - if I echo `$foo` and `$bar` in the constructor function, they show up (with the right values, no less). Yet, despite them being assigned values by `$test1->foo`, they don't show up either through the `var_dump` or through `$test2->bar`. Can someone explain this bit of intellectual curiosity to me?