$i is an instance of class 'a'
$j is an instance of class 'b'
They are two separate instances. $j cannot automatically know what is going on in $i (unless it's a reference, of course).
Just remember, when you use the 'new' keyword, you are creating an instance of a class, not using a static class.
For example.
$a = new classA();
$b = new classA();
$c = new classA();
$a, $b, and $c refer to different objects that just happen to have the same underlying structure/interface, but they cannot automatically share data.
... also, while I'm at it.... in your class b constructor, you should use $this->z instead of $z 🙂
Edit:
P.S. It's probably not a good idea to cram all that logic into your constructor. The way you have them written now, they are no different than a common function. Consider breaking up the constructor logic into other methods to set that stuff/print to screen. That way your subclasses can use the methods, and you don't cram too much stuff into your constructors.