Имя: Пароль:
IT
Веб-мастеринг
ошибка при использовании $this и parent
,
0 vde69
 
26.01.20
17:28
PHP, не пойму в чем ошибка

abstract class FG_Alg_Custom {
    protected $in_data = array();     

    public function read_data($data, $dim){
        $this->$in_data = array(); // вот тут вываливается в исключение
}
}

class FG_Alg_Gray extends FG_Alg_Custom {
    protected $step = 10;              

    public function read_data($data, $dim, $step = 10){
        $this->$step = $step;
        parent::read_data($data, $dim);
    }

}


$FG_Gray = new FG_Alg_Gray();        
$FG_Gray->read_data($a_i, $algall);


вроде по логике работет так
1. создаю объект FG_Alg_Gray,
2. вызываю FG_Alg_Gray.read_data()
3. внутри нее идет вызов перепределеной функции FG_Alg_Custom.read_data(), при этом внутри нее $this должен быть указателем не на класс а на обьект $FG_Gray
4. а вот обращение к свойству обекта выдает ошибку...

единственное чего приходит в голову, это то, что по сколько базовый класс объявлен как абстрактный и может в нем $this равен null? (статический), но тогда вопрос - как правильно реализовать сабж?
1 Генератор
 
26.01.20
17:32
он же как статик метод вызывается, если я правильно синтаксис понимаю, значит там нет this
2 vde69
 
26.01.20
17:35
(1) то есть базовый класс не может быть абстрактным и одновременно реализовывать логику обьекта? только логику класса в целом?
3 Генератор
 
26.01.20
17:40
(2) а хз, я думал :: это вызов только статических методов в php, а это еще и вызов переопределенных...
4 vde69
 
26.01.20
17:42
(3) :: это обращение к свойству класса, а -> к свойству объекта,
5 Ненавижу 1С
 
гуру
26.01.20
18:08
Ты задал значение поля объекта. Значит оно становится рид-онли по правилам php
6 vde69
 
26.01.20
18:16
(5) ух-ты, вот так сюрприз для меня.... спасибо !
7 vde69
 
26.01.20
18:17
(6) хотя вске равно не работает
8 vde69
 
26.01.20
18:22
(5) кстати везде советуют  инирциализировать переменные в классе сразу, так, что наверно я не понял о чем ты
9 Генератор
 
26.01.20
18:43
попробуй без $: $this->in_data = array()
10 vde69
 
26.01.20
18:59
PHP - отстой в плане ООП... наследование кривое.... parent ведет только к методам класса а не к методам унаследованого обьекта


придется переписывать на добавление ссылки на обьект ребенка во все процедуры класса родителя...

есть еще механизм позднего связывания, но он плохо совмещается с обычным функционалом... короче криво все...
11 ДенисЧ
 
26.01.20
19:01
(10) А зачем ты взял пых? Более других языков нет, что-ли?
12 Генератор
 
26.01.20
19:02
попробуй все-таки (9)
13 sevod
 
27.01.20
17:43
(10) Ты перед тем как язык хейтить, хоть немного с базовым синтаксис разберись.
Твое "$this->$in_data = array();"
Должно быть "$this->in_data = array();"
$ - лишний.
ПХП я возможно хуже тебя знаю, но за 10 минут разобрался. Хотя бы попробовал задачу на более простые разложить. Сразу бы понял что не в наследовании проблема.
14 Пинки Пай
 
27.01.20
18:11
(13) Одно другому не мешает. Я в ПХП разобрался довольно хорошо, но при этом тоже считаю его полным отстоем. С момента создания его предназначение изменилось, сам язык тоже сильно изменился и оброс новыми фичами, при этом сохранил в себе кучу старого и ненужного груза.
15 sevod
 
27.01.20
20:04
(14) У пхп одна проблема, что всякие недоучки рукожопят в нем, потому что можно методом тыка начать. К примеру в jave так не прокатит, "не заведется". В итоге о языке и о всех программистах по таким рукожопым судят.
16 Пинки Пай
 
27.01.20
20:38
(15) Еще есть проблема что в ПХП полно старых специалистов, которые пишут код по старому, и думают что это правильно. И полно проектов, где все старье перемешалось с новьем, потому что приходят новые программисты, и пытаются что-то исправить в этом говне. Но проще все с нуля переписать на JS, чем в ПХП исправлять тонны легаси.
17 sevod
 
27.01.20
22:22
(16) На JS?! На ноде? Вообще не спец ни в вэб, ни в пхп, ни в ноде. Но сколько слышу, она не стабильна. Не говоря о том что нет cms на ней и еще много чего. И JS хейтят намного жестче чем пхп. И за дело причем. Когда говорят о  том что ПХП худший языке в мире, делают оговорку что JS еще хуже. Правда в последнее время из за высоких ЗП этот хейт поутих, но именно из за ЗП и востребованности. Если и переписывать, то на ларавель/сифони и т.п.
JS отличный кандидат на убицу пхп, но не сейчас и если доделают. И фронт и бэк на одном языке, это круто. Это уже почти 1С!
18 Пинки Пай
 
27.01.20
23:06
(17) ларавель/сифони - это тоже ПХП. Зачем на них, если ПХП хейтят?
19 Пинки Пай
 
27.01.20
23:08
Чем JS плох? ИМХО никаких минусов. Я щас на TypeScript пишу, вообще все офигенно. ПХП по сравнению с ним гораздо хуже.
20 Пинки Пай
 
27.01.20
23:12
На счет нестабильности ноды не слышал. CMS очень много. Не знаю откуда у тебя такая информация, но она похоже что ложная.
21 sevod
 
28.01.20
08:50
(18) чем сильнее хейтят, тем меньше прогеров. ларавель и симфони никто не хейтит. И php7 тоже.
Какие cms под JS есть?
22 Сияющий в темноте
 
28.01.20
09:10
для понимания хорошо почитать переменные переменные и что делает $$var
язык,на самом деле,замечательный
где еще из коробки обращение к переменной по имени без вычислить (eval в javascript)
где сериализация графа объектов из коробки?
ну и сборка мусора методами php дает прекрасные результаты.
а любителям java и javascript - два кактуса со спиральными иголками в помощь
23 vde69
 
28.01.20
22:33
(9) (13) да, Вы правы, $ реально лишний.

по поводу PHP - совершенно соглашусь в том, что смесь старых методов и новых - бред, да и мусора там куча...

еще там куча всяких заплаток, вроде позднего связывания и прочего, чего нет в нормальных языках... да и тот-же подход с произвольной типизацией и не явным передачей "копии указателя" и еще огромная куча совершенно не очевидных вещей....

я в своей жизни писал на кучи разных языков, PHP в целом вполне приемлемый для определенных задач, но отдельные вещи сделаны просто ужасна именно по причине необходимости совместимости более ранних версий, вот 1с правильно сделала, выпустила восьмерку без оглядки на семерку, а PHP ни как не может уйти на новый уровень...
24 Asmody
 
28.01.20
22:37
Нормальный подход: в (0) нарукожопил ТС, а говно – язык.
25 sevod
 
29.01.20
11:31
(24) причем тут не один такой в теме. Похоже на диагноз когда ведутся на хайп не обращая внимание на реальность.

Проблемы php это говнокодеры и хейтеры, но не язык. Если не надо новый гугл пилить, то все нормально работает. Самый востребованный язык под бэк в вэбе. Есть возможность войти в него, потому что есть вакансии для начинающих. Ну а дальше уже от тебя зависит. Будишь ты "желтые коробочки развозить" или новый фейсбук пилить.