Нельзя называть метод класса так же как класс, т.к. это устаревший синтаксис создания конструктора класса. Вместо этого надо конструктор всегда называть __construct.
К приватным и защищённым полям класса нельзя обращаться снаружи. Либо делайте поле публичным, либо делайте т.н. геттер (getter) - метод, который отдаёт значение из этого поля.
Во втором классе вы пытаетесь в поле этого класса положить значение из другого поля этого же класса, но в этом классе нет поля test1, это поле определено в первом классе.
Объект класса - это коробка. Внутри коробки вы можете оперировать только тем что в ней лежит - полями класса, или же тем, что было в эту коробку засунуто - через аргументы методов.
// файл Test1.php
class Test1
{
private $test1; // приватное поле. к нему нельзя просто так обратиться
public function __construct()
{
$this->test1 = 5;
}
public fucntion getTest1()
{
return $this->test1;
}
}
// файл Test2.php
require "Test1.php";
class Test2 extends Test1
{
private $test2;
public function __construct(Test1 $test1)
{
$this->test2 = $test1->getTest1();
// echo $this->test2; // сайд-эффекты в конструкторе крайне нежелательны
}
public fucntion doIt()
{
echo $this->test2;
}
}
$test1 = new Test1()
$test2 = new Test2($test1);
$test2->doIt();