|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
У кого небудь було подобное ? Сначало я подумал что есть разница между require и include, но самое главное, что в другом месте код с global работает отлично. Я начинаю сходить с ума. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 11:04 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159в другом месте код с global работает отличноЧем это место отличается от другого? А вообще, больше похоже на глюк какой-то. Проверьте на всякий случай, действительно ли перед вызовом функции переменные определены. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:13 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
содержимое этого файла запускается из одной функции. при ее выполнении загружается нужный require_once и запускается снова новая функция уже загруженного только что require. В нем есть содержимое что описано выше. И переменная не видится как глобальная никак. Но если взять любые переменные перед этим, то через глобал они видятся. Не видятся все переменные которые находятся внутри функции1, функции2, в самом файле который подгружен. В общем идея моя была проста - подключать файлы только по необходимости, но как я вижу это не работает. В мануалах не нахожу ничего подобного. Или просто баг, или никто так не делал. Но в мануале никаких предостережений. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:17 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
попробую переписать как класс с динамическим подключением по событии вызова. Посмотрю как поведет себя. Подключать все подряд без надобности тоже не выход. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:19 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
пробовал искать различия между include и require потом думал может что-то с памятью. Движок DLE. Переменная $member_id без всяких проблем в глобал видит. Все новое что не напишу никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:26 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159загружается нужный require_onceтолько при условии, что данный файл не был подключен ранее. Андрей159и запускается снова новая функция уже загруженного только что require.Нифига не понятно, но, надеюсь, речь идет о разных файлах. Андрей159Не видятся все переменные которые находятся внутри функции1, функции2, в самом файле который подгружен.Не понял, кто на ком лежал... Вы хотите передать переменные из вызывающего скрипта внутрь функции или Вы хотите передать локальные переменные функции в вызывающий скрипт? Андрей159В общем идея моя была проста - подключать файлы только по необходимости, но как я вижу это не работает.Видимо, не работает в конкретном Вашем случае. Гадание тут вряд ли поможет, так что, займитесь отладкой. Есть подозрение, что вывод ошибок отключен, потому Вы чего-то не видите. Андрей159пробовал искать различия между include и requireРазличия только в продолжении или прекращении работы скрипта при неудачном подключении файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:32 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159 Код: php 1.
ну это бред. вы - рукожоп. Модератор: полудух , выбирайте выражения! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:02 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
"полудух", спасибо что пришел to vkle, вот схема ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:06 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
1. Загружается ядро DLE 2. Все легкие функции лежат в function.php 3. При (например) сохранении профиля или страницы возле запроса mysql UPDATE дальше вызывается save_to_events(параметры) 4. save_to_events находится в function.php и подгружает через require_one('events.php') и выполняет также функцию save_event(...) которая в events.php. Вначале выполняется код загружен в require_one('events.php'), потом разумеется выполняется функция save_event. 5. В функции save_event в конце просто подключаю require_one('task_condition.php'). никаких вызов функций отсюда. 6. Функция находится внутри task_condition.php и запускается там же из этого файла. И там видимость через global к $member_id есть а к моим любим переменным нет. Вот и вся история ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:17 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
переменная лежит прямо возле функции просто за ее пределами. и не видится. тоесть я думал о global в каждой предыдущей функции, но здесь это не уместно. Должно было так работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:22 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
вывод ошибок не отключен. не ругается просто так ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:27 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей1592. Все легкие функции лежат в function.php 3. При (например) сохранении профиля или страницы возле запроса mysql UPDATE дальше вызывается save_to_events(параметры) 4. save_to_events находится в function.php и подгружает через require_one('events.php') и выполняет также функцию save_event(...) которая в events.php. Вначале выполняется код загружен в require_one('events.php'), потом разумеется выполняется функция save_event. 5. В функции save_event в конце просто подключаю require_one('task_condition.php'). никаких вызов функций отсюда. 6. Функция находится внутри task_condition.php и запускается там же из этого файла. И там видимость через global к $member_id есть а к моим любим переменным нет. В общих чертах понятно. Вероятно, есть смысл сделать несложный тестовый пример, показывающий проблему, который можно быстренько скопипастить и запустить. Насколько понимаю из описания, цепочка вызовов/инклюдов как ниже нарисовал. Если ошибся где-то, приведите свой вариант. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: php 1. 2. 3. 4. 5. 6.
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:50 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Из вашего примера все вроде бы верно, вот только "любимая переменная" как не удивительно будет работать даже несмотря на то, что отсутствует global внутри первой функции function save_to_events() {. то-есть в самом PHP который подключает внутри функции через require сам код php видит переменные. Немножко странно, но мне не мешает. Вот как вы представили пример, не будет работать в последнем task_condition.php скрипт PHP работает, все видит прекрасно. Перед функцией в task_condition.php я пишу $МояНоваяПеременная = 1; Парадокс вот в чем: Код: php 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:06 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Давайте на вашем примере покажу: [quot vkle]Андрей159 Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: php 1. 2. 3. 4. 5. 6.
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:09 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Я вернусь к этому вопросу. Возможно найду причину. Если найду, напишу. Вопрос сложный оказался. 4 часа на него потратил. Сейчас выход какой-то другой найду. Это не проблема. Но все же очень интересно. Загадка. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:11 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Модератор, ты меня конечно прости, но если выбирать выражения, когда чел - рукожоп, то он ничему не научится. Я просто называю вещи своими именами. когда вот так вызываешь ячейку массива, то ты - рукожоп: Код: php 1.
надо вот так: Код: php 1.
когда лезешь в массив через константы, то опять же - рукожоп ты: Код: php 1.
ну а с чего бы ему возвращать то?? Он же красным по белому подсказывает: "Use of undefined constant aaa - assumed 'aaa' in ..." и если вот так отдавать переменную в ф-ю, то туда придёт boolean (на всякий случай, а то вдруг там ждут какое-то значение): Код: php 1. 2.
студент с выключенными ошибками наговнокодил непойми что и ждёт манны небесной рисует картинки собрал пол-форума а самое страшное, что никто на сами ошибки ему тут не указывает Модератор: Когда Вы пишите "так неправильно, надо так" - вопросов нет - указали на ошибки. Но когда Вы вешаете ярлыки без каких-либо внятных комментариев - это, извините, кроме как хамством назвать сложно. К ошибочности терминологии пользователя Андрей159 у меня тоже немало претензий. В частности там, где echo ... // ничего не возвращает. Согласно документации, echo действительно ничего не возвращает, и это абсолютно нормально. Тем более, что и возвращать то некуда. Но автор, возможно, документацию читает по диагонали и имел в виду, вероятно, что-то другое. Скорее всего, правильно читать "ничего не выводит" или "не печатает". полудуха самое страшное, что никто на сами ошибки ему тут не указывает Увы, Вы в этом топике тоже включились совсем не с указания на ошибки. -- vkle ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:15 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Ясно-понятно. При таком раскладе $mynewvar становится локальной переменной функции save_event(), а не глобальной переменной скрипта. По идее, так должно работать: Код: php 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:20 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
to "полудух", Уважаемый, вы застряли на старых версиях. В новой версии можно и не такое делать. Я не успеваю 7,2 полностю освоить, а вы мне вспоминаете о грехах PHP 5.3. А вы знаете что в 5,3 это будет вообще синтаксической ошибкой? В 5,6 это работает. в скобках "двойной_масив[1][2]" не проскочит, если не добавить ['2'], но в {} пройдет. Нужно каждый год учить что-то если не хотите живот отрастить как в папика. Стремитесь, учитесь, язык английский к примеру, в качалку сходите. Работы много, не успеете менять. Зарплаты какие. Конечно каждого нудика туда не берут. API Google, Facebook, VK, OK, Instagram освоите - это только один из 10 нужных пунктиков. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:52 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
"полудух" Извени, не обижайся. В новых версиях можно так писать. Это уже не ошибка, а наверное норма. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:09 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Заработало, когда в предыдущей функции также указал тот же global. На уровне корневой логики PHP не все понятно, но уже хоть знаю как если что бороться с этим. Спасибо за помощь. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: php 1. 2. 3. 4. 5. 6. 7.
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:43 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
видимо когда функция в функции, то нужно в начале родительской функции обязательно указывать global . require просто расширяет функцию в дочерной тоже указываем global и только тогда переменная видится. Не видел мануалы именно с такой ситуацией и объяснениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:50 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
что характерно, что если в подключаемом php написать global, то не работает. А это значит, что функция вовсе не расширяется (это я себе придумал). Нужно именно в предыдущей функции прописать в global. Так работает. Не пойму до конца почему. Ну да ладно. Буду помнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:54 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159 На уровне корневой логики PHP не все понятно Не надо искать сложности там, где их нет. Как раз, на этом уровне всё предельно просто. Возьмите непосредственно код включаемого файла и поместите его вместо строчки include. Где оказалась Ваша переменная? ;-) Остальное написано в разделе руководства про область видимости переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:01 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159to "полудух", Уважаемый, вы застряли на старых версиях. В новой версии можно и не такое делать. Я не успеваю 7,2 полностю освоить, а вы мне вспоминаете о грехах PHP 5.3. А вы знаете что в 5,3 это будет вообще синтаксической ошибкой? В 5,6 это работает. в скобках "двойной_масив[1][2]" не проскочит, если не добавить ['2'], но в {} пройдет. Нужно каждый год учить что-то если не хотите живот отрастить как в папика. Стремитесь, учитесь, язык английский к примеру, в качалку сходите. Работы много, не успеете менять. Зарплаты какие. Конечно каждого нудика туда не берут. API Google, Facebook, VK, OK, Instagram освоите - это только один из 10 нужных пунктиков. Удачи. омг это дно ещё и индекс массива с ключами путает сынок, я каждую неделю узнаю больше, чем ты за год. Код: sql 1. 2.
автор# ./t.php PHP Warning: Use of undefined constant key1 - assumed 'key1' (this will throw an Error in a future version of PHP) in t.php on line 6 PHP Warning: Use of undefined constant key2 - assumed 'key2' (this will throw an Error in a future version of PHP) in t.php on line 6 # php -v PHP 7.2.8-1+0~20180725124257.2+stretch~1.gbp571e56 (cli) (built: Jul 25 2018 12:43:00) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.8-1+0~20180725124257.2+stretch~1.gbp571e56, Copyright (c) 1999-2018, by Zend Technologies у тебя язык впереди головы, овощ. и ещё раз 20 внимательно посмотри, как именно там у тебя ячейка вызывается, и как у меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:03 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Спасибо. Все сложилось. Когда функция в функции, то нужно дважды объявить. Во внешней функции и во внутренней. Иначе никак. Если переменная была передана первой функции как параметр, то можно даже после require_one в самом PHP написать первый global, а второй тот же global внутри вложенной функции и заработает. Если придуманная переменная используется внутри родительской функции, тогда прямо в родительской функции до require_one нужно объявить global и в require_one >> функции также объявить - будет работать. Как-то так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:06 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудух, Удиви хоть чем-то. Пока что одни оскорбления. Ты ничего не должен доказывать. Нет времени на тебя. Веселись дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:17 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159Когда функция в функции, то нужно дважды объявить. Во внешней функции и во внутренней. Иначе никак.Ну почему сразу "никак"? Можно использовать для хранения/передачи данных любой суперглобальный массив. Оно всяко понятнее "глобализации". ИМХО если подходить с точки зрения парадигмы функционального программирования, то global есть банальный костыль. Без него вполне можно обойтись, передавая переменную по ссылке через параметр вызова функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:24 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159API Google, Facebook, VK, OK, Instagram освоите - это только один из 10 нужных пунктиков.Для сшибания бабла - возможно, будет где-то полезным. Для понимания и наработки опыта как программисту в классическом понимании - почти никакой пользы. Это как купить в магазине полочку и прибить ее парой гвоздей к стене. Полочка будет в доме, конечно, но создавать ее Вы не умеете. Конечно, я не призываю всех всё делать руками. Кому-то нравится и галочки в Битриксе тыкать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:34 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleИМХО если подходить с точки зрения парадигмы функционального программирования, то global есть банальный костыль. Без него вполне можно обойтись, передавая переменную по ссылке через параметр вызова функции. в его случае вызов файла идёт ИЗ функции, так что там этот номер не пройдёт, если хочется именно глобальную переменную. Т.е. у всего файла область видимости ограничивается этой ф-ей. В итоге там получилась сложная запутанность. Для таких случаев были придуманы классы, которые в умелых руках творят чудеса и позволяют даже таким лопухам разобраться в коде мастера и через год. Кстати, если будет вереница ф-й, то в каждую кидать эту переменную (а их ведь может быть несколько) вызовет жгучую боль в области геморроя, потому что совершенно не ясно, что с переменной происходило "где-то там, неизвестно где". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 22:21 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудухvkleИМХО если подходить с точки зрения парадигмы функционального программирования, то global есть банальный костыль. Без него вполне можно обойтись, передавая переменную по ссылке через параметр вызова функции. в его случае вызов файла идёт ИЗ функции, так что там этот номер не пройдёт, если хочется именно глобальную переменную.В данном случае в наличии имеется банальнейший бардак. А именно, растусовка элементов одной сущности по разным сущностям другого рода. Конкретно, функция перестала быть единым целым и разошлась по разным файлам. Не криминально, но и код весьма не очевиден для понимания. Вот попытка собрать паззл, да ещё и не понимая, как работает штатный сборщик паззлов, окончилась неудачей. Сомневаюсь, что при рассматриваемом подходе костыль в виде второго глобала принесет какую-то практическую пользу. Если уж очень хочется иметь динамически изменяющуюся функцию и при этом по какой-то причине категорически не хочется использовать ООП, то совсем не обязательно городить огород с инклюдами, можно посмотреть на лямбда-функции, они же, анонимные. Можно, наконец, хоть из кусочков по ситуации сконструячить функцию как текст и eval'нуть его. полудухДля таких случаев были придуманы классы, которые в умелых руках творят чудесаНаверно, Вам повезло с умелыми руками. Не нарывались на классы, где в метод передается с десяток параметров? А когда какие-нить классы Catalog, Categories, Basket наследуется прямиком от Database, а тот, в свою очередь, от Settings... что хотел сказать автор методом select_all() - поди ж угадай сразу, что оно возвращает массив всех записей по SQL-запросу, а вовсе не полный список товаров в корзине... Жаловались на "не работает периодически" - когда разбираться стал, вышло, что скрипт по нескольку соединений к базе открывает и упирается в лимит для пользователя СУБД когда на сайт народ набегает. В общем, чего хотел сказать то. Когда в голове каша - любую технологию испоганить можно так, что порой проще переписать кусок с нуля, чем поддерживать как есть. И классы в том числе. полудухКстати, если будет вереница ф-й, то в каждую кидать эту переменную (а их ведь может быть несколько) вызовет жгучую больНу как сказать... Мое сугубо личное мнение, конечно. Чтоб изолировать от основного скрипта такие вот переменные для прямой передачи из одной функции в другую, вполне можно использовать суперглобальный массив $GLOBALS. Там отдельные массивы "по темам". Конечно, его элементы и применяемость следует расписать где-то в доке, чтоб не нарваться на неприятности. Вряд ли порекомендую этот способ для разработки с нуля, но для поддержки чего-то старенького вполне годится. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 23:58 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleНе нарывались на классы, где в метод передается с десяток параметров? А когда какие-нить классы Catalog, Categories, Basket наследуется прямиком от Database, а тот, в свою очередь, от Settings... что хотел сказать автор методом select_all() - поди ж угадай сразу, что оно возвращает массив всех записей по SQL-запросу, а вовсе не полный список товаров в корзине... давно уже не нарываюсь ни на что, у меня свой фреймворк с нормальным ООП ) в правильном ООП в метод не должно передаваться куча параметров, делая снаружи метод совершенно непредсказуемым. Должно быть несколько методов, в названии которых и фигурируют разные параметры. Чем проще метод, тем лучше. 1-3 -строчные методы в идеале. Глобалы в ООП тоже отваливаются сами. После загрузки настроек приложения никакие глобалы уже не нужны ;) А сейчас уже на next lvl перебираюсь - C++ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 00:55 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудухдавно уже не нарываюсь ни на что, у меня свой фреймворкНа поддержку что-то чужое принципиально не берете? ;-) полудухв правильном ООП в метод не должно передаваться куча параметров, делая снаружи метод совершенно непредсказуемым.Ага, вот ишшо б это каждый понимал. полудухЧем проще метод, тем лучше. 1-3 -строчные методы в идеале.Да ну! И что в эти 1-3 строчки запихаете - вызов функии, с кучей параметров и реализацией бизнес-логики на пару страниц кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 01:15 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkle, БЛ точно так же распихивается по разным классам и методам, т.к. она кусками очень даже воспроизводима повторно. будь это сабмит форм, рисование графиков, парсинг лидов, итп главное правило заключается не в 1-3 строках, а в том, чтобы метод выполнял 1 задачу, а не винегрет выдавал. так что если даже там будет if/switch с набором методов, они читаемость не уменьшат а вот в этих методах уже легко можно уложиться в 1-3 строчки ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 01:49 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleполудухдавно уже не нарываюсь ни на что, у меня свой фреймворкНа поддержку что-то чужое принципиально не берете? ;-) пишу CRMы на заказ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 01:51 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудухчтобы метод выполнял 1 задачу, а не винегрет выдавалБанальная, вроде, задача: проверить данные с формы перед записью в базу, сформировать при необходимости список ошибок. Метод изначально пустой, переопределяется в зависимости от конечного класса (клиент, проект, таск, лог, контакт и т.п.), где необходимо проверять от одного до более десятка параметров. В ряде случаев необходимо свериться со смежными сущностями. Например, дата планового окончания таска не должна превышать дату завершения проекта, а дата окончания субтаска (таковой определяется по данным в поле task_parent), соответственно, финальную дату родительского таска. Есть винегрет? На мой взгляд, нету. А кода до пары страниц в зависимости от. Вы как-то это распихаете в означенные Вами строчки? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 03:28 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleполудухчтобы метод выполнял 1 задачу, а не винегрет выдавалБанальная, вроде, задача: проверить данные с формы перед записью в базу, сформировать при необходимости список ошибок. Метод изначально пустой, переопределяется в зависимости от конечного класса (клиент, проект, таск, лог, контакт и т.п.), где необходимо проверять от одного до более десятка параметров. В ряде случаев необходимо свериться со смежными сущностями. Например, дата планового окончания таска не должна превышать дату завершения проекта, а дата окончания субтаска (таковой определяется по данным в поле task_parent), соответственно, финальную дату родительского таска. Есть винегрет? На мой взгляд, нету. А кода до пары страниц в зависимости от. Вы как-то это распихаете в означенные Вами строчки? Он про SOLID вещает походу. Типа класс ClientController принимает данные с формы, ClientModelBinder биндит их на ClientModel, ClientValidator проверяет и формирует при необходимости список ошибок, ClientService отвечает за бизнес-логику, а ClientRepository за запись в базу. Возможны вариации, но как-то так всё разложено согласно принципу единственности отвественности. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 11:46 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleполудухчтобы метод выполнял 1 задачу, а не винегрет выдавалБанальная, вроде, задача: проверить данные с формы перед записью в базу, сформировать при необходимости список ошибок. Метод изначально пустой, переопределяется в зависимости от конечного класса (клиент, проект, таск, лог, контакт и т.п.), где необходимо проверять от одного до более десятка параметров. В ряде случаев необходимо свериться со смежными сущностями. Например, дата планового окончания таска не должна превышать дату завершения проекта, а дата окончания субтаска (таковой определяется по данным в поле task_parent), соответственно, финальную дату родительского таска. Есть винегрет? На мой взгляд, нету. А кода до пары страниц в зависимости от. Вы как-то это распихаете в означенные Вами строчки? вот вам пример, как обычно пишут БЛ: Код: php 1. 2. 3. 4. 5. 6.
я пишу так: Код: php 1. 2. 3.
и строчек 3, а не 6, и читаемость получше за счёт форматирования. авторНапример, дата планового окончания таска не должна превышать дату завершения проекта, а дата окончания субтаска (таковой определяется по данным в поле task_parent), соответственно, финальную дату родительского таска. Есть винегрет? ещё как есть, вон он, розовенький такой, угловатый... ну во1, формы всё-таки стоит разбивать на табы (именно в бэкенде, а не в таблице. Таблица одна), чтобы юзер засылал кусочек, а не все 80 полей (у меня и такие есть) Т.е. тут ещё архитектура упрощает БЛ. во2, те условия, которые не получается запихать в массив с формой (который жуёт валидатор форм), их можно распихать по отдельным методам, решающим конкретную задачу. Например, "сравнение дат" производится в Date::cmp_two($date1, $date2). авторВы как-то это распихаете в означенные Вами строчки? распихаю в означенные мной однозадачные методы ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 14:48 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Дмитрий МухВозможны вариации, но как-то так всё разложено согласно принципу единственности отвественности. одна из основ ООП ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 14:52 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудухну во1, формы всё-таки стоит разбивать на табы (именно в бэкенде, а не в таблице. Таблица одна), чтобы юзер засылал кусочек, а не все 80 полейПри чем тут табы? Юзер уже все поля заполнил, их значения очищены от возможного мусора и сохранены в экземпляре класса как свойства. Настало время проверки данных. полудухНапример, "сравнение дат" производится в Date::cmp_two($date1, $date2).Ну а даты откуда возьмутся? Одна пришла из формы, это понятно. Вторая - ? полудухя пишу так: Код: php 1. 2. 3.
и строчек 3, а не 6, и читаемость получше за счёт форматирования.Не принципиально. К тому же, без синтаксической подсветки кода читаемость структуры сильно теряется. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 15:17 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Мне нравятся классы. Точнее нравится как редактор оформляет код и подсказывает. А значит все дело в любви к редакторе, а не к классам. Если редактор усовершенствуется и будет больше подсказывать, то наверняка не будут так тратить время на обертку простейшего кода в класс. Классы использую только по назначению. С ними падает быстродействие (не знаю как дела с PHP 7,2, но по производительности далеко до JS). Встречал движки сделаны как конфетка снаружи, а внутри без стопки мануала не разобрать. Все функции по 20 раз вложены друг в друга классами. Одну фичу прикрутить было мучением. Все основано на событиях, а те в свою очередь все части блоков куда-то кешировали. Не зная что вызвать - ничего визуально не изменялось, хоть напрямую делал изменения - сайт работал дальше на своей волне пока не происходило событие UPDATE в классе. Где его искать - не было особо времени. Я сделал внешнюю затычку и все работало без издеваний над чужим кодом. Но сайт все время умирал и мучался не выдерживая даже 10 одновременных запросов поиска. Весьма извесный движок ImageCMS на КодекНайтере. В итоге разработчики заявили что скоро перейдут на новый движок. И через год перешли. Угадайте какой на какой движок ??? ВордПрес.))) Нитернет-магазин... Отошел от темы... Классы - для множественного использования учитывая индивидуальную внутреннюю жизнь в классе. Если кратко, то салютировать разноцветными частицами в рандомных направлениях это задания для классов. Делаем выстрел (активируем класс) - полет каждой частицы просчитает класс. А поручить одно задания без каких либо потом дополнительных обращений - это для функции. Переделал часть каталога в интернет магазин. Был не готов к монетизации, пришлось доделать "предложение сайта", "счет/оплата", "история (хронология событий)". Сейчас для стимулирования осталось подкрутить "задания" и награждать дополнительным рейтингом. "История" небольшая функция, которая находит разницу и ведет журнал изменений/дополнений/удалений. Легко отследить по следам и по необходимости вернуть обратно или поправить. В этой функции подвязал проверку "задания" Так случилось что все этапы разработки были простыми. Все чего боятся другие я использую с легким понимаем. Тот же GOTO совсем не смертельный, а наоборот много упрощает (конечно же одиночный случай). Рекурсия также используется для чтения до 7ми уровневого вхождения по таблицам при компилировании страниц конструктора "прайс-соглашение". Все всегда просто. А тут заштопорило на костыле global... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 15:21 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудухвот вам пример, как обычно пишут БЛ: Код: php 1. 2. 3. 4. 5. 6.
Нет, обычно пишут так: Код: java 1. 2. 3. 4. 5. 6. 7.
Если уж придерживаться всех рекомендаций по формлению кода. полудухя пишу так: Код: php 1. 2. 3.
и строчек 3, а не 6, и читаемость получше за счёт форматирования. Да запишите тогда уж в одну строку, если дело в их количестве. Но это лишь частный случай, когда ваш стиль возможно и смотрится проще, но в любой адекватной команде вам так писать не дадут. Пишите в одного проекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 15:34 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
[quot полудух]я пишу так: Код: php 1. 2. 3.
мда.. я сделал свой прекомпилятор и испольую вот такие теги Код: php 1. 2. 3. 4. 5.
При сохранении кода в PHPШторм редакторе вызывается мой прекомпилятор. Во первых он убирает все комментарии учитывая всевозможные нюансы с " ' ` {} 2. Если находит тег [copy= и обнаружит что код был изменен, то произведет замену во всех файлах, где есть тот же [copy=001] 3. Отправит на сервер по FTP все измененные файлы Если нужно вставить копию кода в новый php файл то используется {copy=001} который автоматически будет заменен после инициализации. На сервере будет только чистый компактный код Очень удобно. Ведь есть много повторений например в том же addnews.php, editnews.php, интерактивные/addnews.php, интерактивные/editnews.php Также там есть более сложный алгоритм, который запись HTML копирует как PHP значение, которое можно потом использовать. Сам прекомпилятор это отдельная программа, которая запускается с параметром от PHPШторм. Если просто запустить, то можно посмотреть все участки "copy" кодов, а также запросить новый номер. Чем еще хороша программа. Можно работать как шаблоном. Можно заниматься несколькими проектами одновременно, если сайты очень похожи начинкой. Любое усовершенствование на одном сайте улучшит автоматически все связанные сайты. Удобства никакого нет, а вот экономится время очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 15:55 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleПри чем тут табы?при том, что вам не нужно обрабатывать 80 полей за раз, а лишь 10. полудухНапример, "сравнение дат" производится в Date::cmp_two($date1, $date2).Ну а даты откуда возьмутся? Одна пришла из формы, это понятно. Вторая - ? Ну это же ваш пример. Найдите там себе свою вторую дату: авторНапример, дата планового окончания таска не должна превышать дату завершения проекта , а дата окончания субтаска (таковой определяется по данным в поле task_parent), соответственно, финальную дату родительского таска . Не принципиально. К тому же, без синтаксической подсветки кода читаемость структуры сильно теряется.вам видимо показалось, что я здесь чтобы спорить с вами об очевидных вещах ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 18:59 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудухvkleПри чем тут табы?при том, что вам не нужно обрабатывать 80 полей за раз, а лишь 10.Речь идет о сущности в целом, а не об отдельных полях. полудухНу это же ваш пример. Найдите там себе свою вторую дату: авторНапример, дата планового окончания таска не должна превышать дату завершения проекта , а дата окончания субтаска (таковой определяется по данным в поле task_parent), соответственно, финальную дату родительского таска .Именно. Ключевое слово "найдите". Т.е. вымутить еще несколько строк кода для создания экземпляра сущности, загрузки в объект данных с заданным айди из базы, и только тогда искомая дата станет доступна. Четвертой только строчкой можно приступить к сравнению, пятой сформировать ошибку. Удачи Вам в Ваших трехстрочных методах! Мы уж, как-нибудь, по рабоче-крестьянски. полудухвам видимо показалось, что я здесь чтобы спорить с вами об очевидных вещах )Нет. Просто я не приемлю код-лапшу. Глаза, знаете-ли, устают от него. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 19:42 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
vkleполудухпропущено... при том, что вам не нужно обрабатывать 80 полей за раз, а лишь 10.Речь идет о сущности в целом, а не об отдельных полях. вовсе нет, такого условия не стоит. Никто не требует за раз зохавать ВСЕ поля в форме. и юзеру, и разрабу удобнее работать со сгруппированными однотипными порциями: персональные данные, био, предпочтения, документы, итд. полудухНу это же ваш пример. Найдите там себе свою вторую дату: пропущено... Именно. Ключевое слово "найдите". Т.е. вымутить еще несколько строк кода для создания экземпляра сущности, загрузки в объект данных с заданным айди из базы, и только тогда искомая дата станет доступна. Четвертой только строчкой можно приступить к сравнению, пятой сформировать ошибку. Удачи Вам в Ваших трехстрочных методах! Мы уж, как-нибудь, по рабоче-крестьянски. спор ради спора вы сейчас говорите о способах валидации юзерского ввода, а не о парадигме ООП. т.е. начали мы тут про здравие, но вас всё тянет на упокой... метод решает 1 задачу. Точка. в идеале 1-3 строчки. А может и 5. А если там SQL-запрос, то может быть и целый экран. Будет он там тащить данные из БД или считать чего-то - дело десятое. Главное, чтобы задача была одна. В вашем случае я бы условия вообще закэшировал при создании формы, если время проекта не может измениться, пока юзер форму сабмитит. Но также обычно не будет проблемы дёрнуть из БД (конечно же в отдельном методе) или во время INSERT/UPDATE чекнуть через CASE. В итоге никаких винегретов и через год этот код будет всё так же читаем и понятен даже студенту. авторТ.е. вымутить еще несколько строк кода для создания экземпляра сущности вообще-то этим spl_autoload занимается... и методы там static:: авторпо рабоче-крестьянски крестьяне опять что-то новое изобрели? ) полудухвам видимо показалось, что я здесь чтобы спорить с вами об очевидных вещах )Нет. Просто я не приемлю код-лапшу. Глаза, знаете-ли, устают от него. :) что ещё за лапша? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2018, 23:12 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудух, Речь идет о валидации объекта с множеством данных. Метод check() должен вернуть либо "годен", либо "найдены ошибки". Ни больше и не меньше. Мы совершенно о разных о разных вещах говорим, очевидно. Продолжайте думать о формах, если Вам так угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2018, 00:02 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
мы говорим вот об этом полудухvkleНе нарывались на классы, где в метод передается с десяток параметров? А когда какие-нить классы Catalog, Categories, Basket наследуется прямиком от Database, а тот, в свою очередь, от Settings... что хотел сказать автор методом select_all() - поди ж угадай сразу, что оно возвращает массив всех записей по SQL-запросу, а вовсе не полный список товаров в корзине... давно уже не нарываюсь ни на что, у меня свой фреймворк с нормальным ООП ) в правильном ООП в метод не должно передаваться куча параметров, делая снаружи метод совершенно непредсказуемым. Должно быть несколько методов, в названии которых и фигурируют разные параметры. Чем проще метод, тем лучше. 1-3 -строчные методы в идеале. vkleДа ну! И что в эти 1-3 строчки запихаете - вызов функии, с кучей параметров и реализацией бизнес-логики на пару страниц кода? а куда вас теперь унесло в попытках что-то доказать я без понятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2018, 17:08 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
полудух, Пока что Вы пытаетесь кому-то что-то доказать, притом, почему-то не в тему. Такое обычно бывает у политиков, когда по делу сказать им нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2018, 19:08 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Все-таки переделал по быстрому все на два класса))) Запутался с объявлениями и стало не весело. Сделал реактивный запуск Код: php 1. 2. 3. 4. 5. 6. 7. 8.
Очень удобно и не нужно ничего помнить в дальнейшем Вызов с любого места к примеру: Код: php 1. 2.
Класс KAS_task подключается require_once автоматически. За это отвечает spl_autoload_register и функция kas_autoload. И как я хотел загружается только по необходимости. На счет global, то вывод такой: 1. global 2. require_once а не наоборот При трассировки кода получалось, что загружалось require_once, но до этого global не было, а было внутри файла, тоесть после require_once. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2018, 17:35 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
там не нужен _once, он дорогой Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
в классах пишется: Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2018, 19:25 |
|
|
start [/forum/topic.php?all=1&fid=23&tid=1460173]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 484ms |
0 / 0 |