Имя: Пароль:
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 это говнокодеры и хейтеры, но не язык. Если не надо новый гугл пилить, то все нормально работает. Самый востребованный язык под бэк в вэбе. Есть возможность войти в него, потому что есть вакансии для начинающих. Ну а дальше уже от тебя зависит. Будишь ты "желтые коробочки развозить" или новый фейсбук пилить.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn