Почему ругается notice? Доброго времени суток!
Постараюсь правильно расписать мыслю, спасибо тем, у кого хватает терпения прочесть.
Есть абстрактный класс A.
Есть singleton B который наследует А
есть класс C который наследует А
Все бы хорошо, но у А есть рекурсивный метод и переменная $array, которая перевызывает саму себя. если не находит нужное число
если $i больше двух - то начинаем искать $i в классе C, до этого ищем в классе B
надеюсь не запуталabstract class A
{
$arr = array();
public static function test($array, $i)
{
if(empty($array->arr[$i]))
{
$i++;
self::test($array->arr[$i], $i)
}
}
}
и функция казалась бы работает.
Нооо, нотесы ругаются Notice: Accessing static property C::$arr as non static
я так подозреваю что ругается из-за того, что ($array->arr[$i], $i)
вызвано как то не так.
Мне кажется что я "далеко куда то смотрю" И решение под носом.
Ткыните пожалуйста, без тапков. Спасибо

21 Авг 2019 в 06:59
346 +1
0
Ответы
1

Здравствуйте! Проблема здесь в том, что вы обращаетесь к свойству $arr как к статическому, но оно не объявлено как статическое. Вы можете изменить свойство $arr, сделав его статическим, и обращаться к нему через self:: вместо $array->arr.

Примерно так:

abstract class A
{
public static $arr = array();
public static function test($i)
{
if(empty(self::$arr[$i]))
{
$i++;
self::test($i);
}
}
}
class B extends A
{
}
class C extends A
{
}
B::$arr = array(1, 2, 3, 4, 5);
C::$arr = array(6, 7, 8, 9, 10);
A::test(3);

Таким образом, вы будете работать со статическим свойством $arr и избежите ошибки с Notice. Надеюсь, что это поможет вам решить проблему. Если у вас возникнут еще вопросы, не стесняйтесь задавать. Удачи!

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир