Почему ругается 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) вызвано как то не так. Мне кажется что я "далеко куда то смотрю" И решение под носом. Ткыните пожалуйста, без тапков. Спасибо
Здравствуйте! Проблема здесь в том, что вы обращаетесь к свойству $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. Надеюсь, что это поможет вам решить проблему. Если у вас возникнут еще вопросы, не стесняйтесь задавать. Удачи!
Здравствуйте! Проблема здесь в том, что вы обращаетесь к свойству $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. Надеюсь, что это поможет вам решить проблему. Если у вас возникнут еще вопросы, не стесняйтесь задавать. Удачи!