Описание раздела «Массивы и функции в PHP»

Обсуждение главы «Массивы и функции в PHP»

По ходу прохождения данной главы, а так же все предыдущих глав посвященных PHP возникло несколько вопросов.

  1. Как определять, какую функцию или какую переменную писать в том или ином документе?
    Одна функция в компонентах страницы, другая функция в сценариях php, третья в листе с массивами, четвертая уже встроена в сам php язык.
    Такая мешанина, очень трудно уследить, какая переменная и какая функция где объявлена, из какого компонента вызывается.
    Может можно собрать все функции в кучу - в один документ и от туда вызывать их в нужный раздел html документа.
    И если можно оставьте все компоненты сайта, а то те компоненты над которыми я работал в предыдущих главах вы почему то скрываете и я не могу видеть общую картину. Или еще лучше сделайте в конце курса архив с сайтом, чтобы можно было потом открыть его в VS Code и изучить его структуру.

  2. И до сих пор непонятно почему компоненты сайта имеют тип файла php. Внутри них находится html код, значит они должны быть по логике header.html, footer.html и т.д. А php формат должны иметь только файлы со сценариями сборки из html файлов, опять же это по логике.
    Сейчас получается, что если я допустим захочу написать одностраничный лендинг, то без разницы в каком формате я сохранять его буду? index.html и index.php будут работать одинаково, даже если я и не буду пользоваться php сборкой страниц?

Очень путаная подача материала в комплексе, каждый отдельный урок, простой и понятный, но все вместе уроки непонятные, т.к. не удается увидеть общую картину. Можно понять как работает отдельный элемент. НО как это все вместе работает, что, куда, как и с чем связано, это не понятно.
Первый раз прошел вообще нифига не понял, сейчас второй раз прохожу уже полегче. Возможно нужно пройти третий раз чтобы все окончательно понять. Пока в голове остается фрагментированная информация и не удается выработать системный подход в разработке сайта.

PS
3. И немного не в тему, я прошел все курсы у вас на сайте по JS и PHP и они очень похожи в функциональном плане. Так же устроены функции, массивы, циклы и все прочее, только немного отличается синтаксис. А если все ЯП делают одно и тоже, а отличаются только синтаксисом, то почему их так много.
В частности, почему нельзя PHP использовать вместо JS, если его код так легко встраивается в HTML?
Или наоборот, JS вместо PHP, просто ввести в JS команду require и с помощью JS собирать страницы на сервере? С ходу я в Гугле не нашел ответ на этот вопрос пойду попробую изменить поисковый запрос.

Здравствуйте!
Попробую ответить.

  1. В реальных проектах код разбивают по-разному. Если это небольшой сайт, над которым трудится один человек, то нередко все функции собирают в одном файле и просто подключают его в компонентах.
    В больших проектах код бьют на модули со своими пространствами имён. Это продвинутая тема, мы её не касались в вводном курсе, но об этом можно почитать в документации: https://www.php.net/manual/ru/language.namespaces.php
    В главах тренажёра мы совместили эти два подхода. У нас есть единый файл в функциями, имитирующими работу базы данных, и мы просто подключаем его на страницы. И есть функции, которые используются только для одной части сайта, их мы объявляем в сценарии и вызываем в шаблоне.
    Плюс встроенные функции, они незримо присутствуют в каждом РНР-файле =)

  2. HTML-код можно использовать в файлах с расширением php, но PHP-код не работает в файлах с расширением html. Мы вставляем кусочки РНР-кода в шаблоны, поэтому и расширение у них должно быть php.
    Если компонент полностью статический, то расширение может быть и html. Сайт заработает. Но даже в таком случае часто делают расширение php – для единообразия, на случай, если что-то изменится, и РНР-код таки придётся внедрить.

  3. JS и РНР относятся к одному семейству языков. Их называют си-подобными, потому что их синтаксис похож на синтаксис языка С. Это как с обычными человеческими языками. Есть романские, есть славянские, германские и так далее.
    Си-подобные языки – не единственная группа. Есть ЯП, которые имеют совсем другой синтаксис.
    Что касается количества языков, то это вопрос удобства. Например, все ножи выполняют одну функцию - режут что-то. Но столовый нож, которым мы режем котлеты, сильно отличается от мачете, которым можно прорубаться сквозь джунгли. Так и с ЯП. Каждый заточен под что-то своё. JS работает в браузере, не приспособлен для работы с файловой системой, но умеет отслеживать клики пользователя. РНР работает на сервере и ничего про пользователя не знает, зато может послать запрос в базу данных и собрать страничку. Есть языки для мобильной разработки, для написания программ для десктопа - у каждого своя специфика.
    Каждый ЯП создавался для какой-то своей задачи, разными людьми, в разное время. А универсален, наверное, только машинный код. Но писать на нём так же удобно, как резать котлету гигантским мачете =)

2 лайка

Спасибо за ответ.
Второй пункт стал полной неожиданностью. Полгода изучаю верстку и нигде ни разу не встречал информации от том что сайты собирают из php файлов. Везде, и на ютубе и на сайтах, и на форумах, одни index.html-и и всё.
Решил проверить как это работает, изменил index.html на index.php сразу вылезло уведомление в VSCode - “Не удается проверить, так как не задан исполняемый PHP-файл. Используйте параметр php.validate.executablePath, чтобы настроить исполняемый PHP-файл.” А в браузере страница перестала открываться, а открывается вся папка с проектом.
В интернете предлагают разные решения, скачать какие-то файлы, изменить настройки в VSCode, установить какой-то локальный сервер, в общем сложно и нужно долго разбираться.



По третьему пункту мне не понятна аналогия с материальными объектами, хотя я подобную аналогию не в первый раз встречаю. Материальные объекты, такие как ножи например, будучи выпущеными на фабрике не поддаются изменению, по крайней мере изменить из крайне сложно. Но язык это же не что-то материальное, его можно как угодно менять и приспосабливать к чему угодно.

Почему бы ЯП не сравнить допустим с русским языком? Ведь для того чтобы написать стих мне не нужно изобретать специальный поэтический язык, для написания прозы - не нужно изобретать прозаический язык, для того чтобы отдавать команды в армии, мне не нужен специальный армейский язык и т.д. Все эти три задачи я буду решать одним языком, имеющим единый синтаксис, единственное что я буду делать это расширять словарный запас по мере необходимости.
Так же и с ЯП, в какой язык не плюнь, везде одни и те же циклы, функции, массивы и объекты, у них даже синтаксис похожий, различие только в мелочах типа дополнительные двоеточия, точки с запятой и т.д. В чём различие языков помимо синтаксиса, я так и не понял.

У ЯП что есть какой-то скрытый слой, который отвечает за то где кто лучше работает? Почему допустим цикл написанный на PHP на сервере работает быстро, а если я этот же самый цикл попробую запихать в браузер, то в браузере ( на ПК пользователя) он будет работать медленно?
Или например, что мешает внедрить в PHP функцию onclick чтобы он мог так же как и JS работать не только на сервере но и в браузере? Т.е. делать как в реальном человеческом языке, когда мы хотим описать что-то, но не находим в русском языке подходящих слов, мы начинаем использовать англицизмы, типа “хейтер”, “троллинг”, “аутсорсинг” и т.д. Тем самым мы не изобретаем новый язык или не пытаемся полностью выучить английский язык. Мы просто заимствуем некоторые слова из другого языка.

Статические сайты - это html, вы правы. Но соцсети, интернет-магазины или даже тот же сайт Академии - это динамика. Вы заходите в ВКонтакте, и в шапке видите своё имя. Это значит, что где-то какой-то разработчик сверстал отдельную версию сайта под ваши данные? И обновляет их, когда вы решите сменить аватарку? Разумеется, нет.
В этом случае страница, шаблон, один. Но в него автоматически подставляются данные из базы. Вот для этого и нужен PHP.

А что касается того, почему у вас не запустился сайт, когда вы изменили разрешение файла на php… причина тесно связана с третьим вашим вопросом. Уйдём от метафор, ЯП - это не ножи и не человеческий язык. Это программа. Она берёт код, который пишет человек, и превращает его в код, который понимает машина. То есть превращает все эти циклы, условия и переменные в нолики и единички.
Я сказала, что JS работает в браузере. Это значит, что в состав браузера входит программа - движок/интерпретатор - который получает текст а-ля alert('hello, world!') и заставляет компьютер что-то сделать.
PHP - это тоже программа. Она установлена на сервере, на котором лежит ваш сайт. Если вы хотите запускать файлы php на своём компьютере, то на него надо установить соответствующий софт: сам РНР (отсюда - https://www.php.net/downloads.php) и сервер, который будет принимать запрос и запускать РНР, если это требуется.
Синтаксис ЯП - это лишь интерфейс, то есть то, с помощью чего человек взаимодействует с программой. Интерфейсы бывают графические (например, в том же браузере куча кнопочек, переключателей и так далее), а бывают текстовые (работали когда-нибудь в терминале/командной строке?). JS и PHP работают с текстом, но есть и графические языки, например Скретч - https://ru.wikipedia.org/wiki/Скретч_(язык_программирования)
Как разные программы решают разные задачи, так и разные ЯП существуют для разных целей. И в фотошопе, и в ворде есть кнопки “Создать” и “Сохранить”, но было бы странно исходя из этого писать текст в фотошопе, а картинки рисовать в ворде. Сходство интерфейса не означает одинаковую функциональность.

Подозреваю, всё это выглядит сложно и запутанно… Но вы сами спросили =) Если интересно, как устроены ЯП и компьютеры вообще, советую поискать в сети курс “Computer Science 101”. Вроде его даже на русский переводили.

1 лайк

Я самом деле я признателен что вы возитесь со мной и тратите свое время. И чем более развернутым будет ваш ответ тем лучше.

Картинка начинает потихоньку складываться, получается последовательность такая:

  1. Я в VSCode написал какую-то программу - это программа по сути инструкция для CPU или GPU, - сделай то-то в такой-то последовательности, при таких-то условиях.

  2. Теперь компьютер должен как-то увидеть эту инструкцию, эту инструкцию можно передать компьютеру с помощью терминала/командной строки на прямую, или в случае с JS я использую посредник в виде браузера.
    Движок/интерпретатор браузера получает инструкцию и переводит (правильно наверно говорить компиллирует) её в последовательности нулей и единиц. Затем инструкция в виде нулей и единиц поступает на GPU видеокарты, та читает эти инструкции и выводит на монитор в окне браузера то что нужно, согласно полученной инструкции.

  1. Тогда получается если всё в конечном итоге сведется к последовательности нулей и единиц, то я могу вообще написать программу на машинном коде, нажимая на клавиатуре две клавиши с цифрами 0 и 1. И синтаксиса как такового тут даже не будет (просто так я буду писать очень долго и скорее всего допущу много ошибок в коде).
    Но если все сводится к нулю и единице, но какая разница от куда пришли эти нули и единицы?
    Пришли нули и единицы от PHP, или от JS, или от Python и пр. конечный результат будет один и тот же. Тогда смысл идти тремя разными путями к одному и тому же результату?
    Допустим я написал цикл на PHP, потом точно такой же цикл на JS и на Python. Когда процессор получит эти три цикла от трех разных программ в виде машинного кода он сделает три абсолютно одинаковых вычисления.

Значит различие в этих ЯП заключается в том какими путями идут инструкции до процессора, я правильно понимаю? Например от C++ инструкции придут к процессору быстро, поэтому он считается высокопроизводительным, а от Python инструкции будут долго интерпретироваться, компилироваться поэтому он считается медленным. Значит все различие между ЯП заключается в разной производительности в разном наборе библиотек, фреймворков, которые формировались разное время при разных условиях и потребностях, оказывавших влияние на развитие языка.
Чисто теоретически получается я все-таки могу написать сайт на любом из существующих ЯП?
(В принципе, если хотите можете не отвечать на эти вопросы, т.к. знания ответов на них не несет на текущий момент практического смысла. Это больше мое любопытство и желание понимать как действуют языки на аппаратном уровне. Может со временем когда я выучу хотя бы один ЯП я сам во всем этом разберусь.)



С терминалом/командной строкой не знаком. В январе этого года оплатил подписку на Интерактивные курсы. И начал абсолютно с нуля проходить их. (До этого максимум что я мог, это установить игру на ПК и парочку модов внутри игры, вот и все мои знания и опыт). Пару дней назад наконец прошел все главы во всех курсах. Сейчас смотрю в PHP появилась новая глава, надо будет её добить чтобы завершить всё на 100%. Т.е. мои знания сейчас находятся исключительно в рамках Интерактивных курсов HTML Академии.
Поэтому терминал для меня это что-то типа командной строки в Window, когда я нажимаю Win+R и в появившемся окне набираю cmd Появляется маленькое черное окно в котором на английском языке нужно что-то печатать. Но подозреваю что речь не об этом.


Сейчас когда я по сути прошел интерактивные курсы, я думал закрепить полученые знания на практики и пару месяцев пособирать простенькие лендинги. И наконец то изучить как следует Git. В блоге Академии я нашел инструкцию как работать с гитом через командую строку, и делал все по порядку, но что-то не получилось, по моему я даже не смог авторизоваться через GitBash/
Ну с гитом я думаю разберусь уже нашел пару неплохих сайтов на эту тему.
Потом как следует попробую изучить JS на сайте learn.javascript.ru а после этого возможно большинство вопросов отпадут сами собой.

PS. Computer Science 101 поискал, но пока не нашел на русском языке, попробую еще поискать по позже.

Теоретически - да. Но практика, как всегда, чуточку сложнее. Разработка сайтов делится на фронтенд и бэкенд.
Начнём с бэкенда. База, шаблоны, валидации, авторизации - всё это живёт на сервере и находится во власти разработчика/администратора. И в данном случае да, код можно писать на любом ЯП. На каких-то будет проще, на каких-то труднее. Есть языки с узкой специализацией - например, РНР. Он заточен именно под веб, и у него есть стандартная библиотека на 4000, что ли, функций, которые удобно решают самые частые задачи веб-разработчика. Какой-нибудь Python или Javа такой узкой специализации не имеют. Но бэкенд на них тоже пишут, фреймворки и библиотеки решают.
Так что выбор языка на бэке - вопрос удобства и привычки.
С фронтендом всё иначе. Он запускается в браузере пользователей. А браузеры разные, машины разные, настройки доступа и безопасности разные. По умолчанию всё максимально урезано. Единственный ЯП, который поддерживают все современные браузеры, это JavaScript. Поэтому весь фронт написан на нём.

WebAssembly и Node немного портят дихотомию фронта/бэка, но в целом ситуация именно такая.

То есть теоретически можно добавить onclick в РНР, но в браузерах РНР нет, поэтому скрипт там просто не запустится. РНР есть на сервере, но слать запрос на сервер при каждом клике или скролле - ну, такое…

1 лайк

Спасибо за ответы :+1:, есть еще куча вопросов, но не хочу разводить флуд, т.к. многие вопросы будут не по той теме которая обозначена в заголовке.

а что такое ЯП?