-7
<?php
    class Test
    {
        private $a = 10;
        public $b ='abc';



}
class Test2 extends Test
{

    function __construct()
    {

         echo $this->a;
         echo $this->a = 20; // wh
    }

}
$test3 = new Test2();
tereško
  • 58,060
  • 25
  • 98
  • 150

2 Answers2

3
echo $this->a;

echoes value of class property a. This property is not defined, because property a of class Test is private and therefore is not available in class Test2. So, property a is created in class Test2.

echo $this->a = 20; // wh

does the next: assigns 20 to a property (which was created on the previous line) and echoes result of assignment which is 20.

The solution:

class Test
{
        // protected property is avalilable in child classes
        protected $a = 10;
        public $b ='abc';
}

class Test2 extends Test
{
    function __construct()
    {
         echo $this->a;
         $this->a = 20;
         echo $this->a;
    }
}
$test3 = new Test2();  // outputs 10 20
u_mulder
  • 54,101
  • 5
  • 48
  • 64
-1

You should change

private $a = 10;

to:

protected $a = 10;
Walid Ajaj
  • 518
  • 4
  • 8
  • Sure, but the question is "why"? You could learn a thing or two from [u_mulder's answer](https://stackoverflow.com/a/46745074/1415724). – Funk Forty Niner Oct 14 '17 at 13:43