|   |   | 
| 
 | ошибка при использовании $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 это говнокодеры и хейтеры, но не язык. Если не надо новый гугл пилить, то все нормально работает. Самый востребованный язык под бэк в вэбе. Есть возможность войти в него, потому что есть вакансии для начинающих. Ну а дальше уже от тебя зависит. Будишь ты "желтые коробочки развозить" или новый фейсбук пилить. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |