@Kar92

Не могу передать $test1 с класса Test1 в Test2, «помогите» пожалуйста?

<?php

class Test1
{
    protected $test1;

    public function Test1()
    {
        $this->test1 = 5;
    }

}

$test1 = new Test1();


<?php
require "Test1.php";

class Test2 extends Test1
{
    private $test2;

    public function Test2()
    {
       $this->test2 = $this->test1;
       echo $this->test2;
    }

}

$test2 = new Test2();
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 2
@4iloveg
Full-Stack HTML Developer
$test1 = new Test1();
Это ты написал в первой части кода.
Вопрос: зачем написал, если нигде не используешь эту переменную?
Далее у тебя по методу в классе. Есть ли место где они вызываются?
Ответ написан
Комментировать
@MadridianFox
Web-программист, многостаночник
Нельзя называть метод класса так же как класс, т.к. это устаревший синтаксис создания конструктора класса. Вместо этого надо конструктор всегда называть __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();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 22:03
10000 руб./за проект
03 мая 2024, в 21:57
1000 руб./за проект
03 мая 2024, в 21:47
500 руб./за проект