За последние 24 часа нас посетили 51519 программистов и 1446 роботов. Сейчас ищут 919 программистов ...

Статические методы и свойства - это ООП?

Тема в разделе "PHP для новичков", создана пользователем Walk, 21 ноя 2017.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    --- Добавлено ---
    Я явно указал сию беседу как рассуждение со стороны. Не чего не утверждал, а именно указывал на то что я размышляю, что оно выглядит вот так, а как на самом деле там внутри да кто его знает.
    А js я вообще привёл как аналогию работы я не имел ввиду что оно внутри работает вот так.
    А вообще один фронтер рассказывал что в js создаются линки на объекты при их приравнивании к переменным.
    то что она так работает это я знаю. А вот как внутри под коркой она работает я не знал.
    --- Добавлено ---
    @Fell-x27 и кстате мне не нравистя то что ты мне рассказал. Оно не должна вот так работать.
    Потому что нет никакой конкретики. Не люблю такое. Люблю когда всё указано чётко и конкретно 1 = 1, а не так что 1 может быть любым из 999
    --- Добавлено ---
    поэтому я и не люблю Js нет не чего конкретного. Всё может любым всё может быть объектом а может быть и массивом вот хрен пойми. Функция может являтся объектом. Т есть вроде бы это функция, но если мы вызовем её через new всё создаёт экземпляр
    Какого класса ? Т есть при инциализации функции под неё создаётся класс? Или же создаётся класс в тот момент когда указывается new? Как оно работает ?
    --- Добавлено ---
    у js явная проблема с типизацией данных.
    --- Добавлено ---
    а где вообще ты информацию эту достал? Даже в доке не написано как оно под коркой работает.
    --- Добавлено ---
    колись ты разработчик яваскрипта?
    --- Добавлено ---
    или это тоже твои рассуждения?)
    --- Добавлено ---
    или когда мы в функции указываем уникальный ключ this она сразу при интерпритации она создаст класс по внутренним параметрам функции ?) Т.есть Любой метод из которых будет являтся конструктором ? Т есть в общем понимании что мы знаем о конструкторах это такая функция которая тут же срабатывает при вызове класса ведь всё верно? Тогда почему при вызове класса как ты написал в примере тут же не отработали все функции? А значит я делаю вывод там не такой конструктор как мы привыкли его видеть. ТАм не что другое. Свой конструктор ява скрипта. Который и не конструктор вовсе.
    --- Добавлено ---
    Можешь мне рассказать пожалуйста подробную логику работы ява скрипта, если ты знаешь как она работает потому что у меня вопросов к этому языку тонны а ответов нету. И найти не могу.
    --- Добавлено ---
    если в пыхе всё доступно, понятно и интуитивно. То в js явный раскол логической цепочки наблюдается (функция=объект=класс) что?
    чё курили разрабы языка?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Что еще JS тебе должен/не должен?

    Что значит "приравнивание к переменным"? Ты про присвоение? Да, в JS объекты передаются и присваиваются по ссылке. Во всех языках(и в пхп тоже, внезапно) объекты передаются и присваиваются только по ссылке. Объекты - это ссылочный тип данных. Это вот буквально их суть.

    Плохо искал, значит. Нет, это не мои рассуждения. Это описание механизма создания объекта через вызов функций посредством оператора new.

    Ты очень, очень, ОЧЕНЬ плывешь в терминологии. Ты сам не понимаешь, что говоришь. Печально то, что ты не понимаешь даже таких базисов, хотя в том же PHP должен был с ними сталкиваться. Потому что, если бы понимал, не говорил бы это вот.

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


    Ты как фермер, который завел страусов, но не понимает, как их доить. Не надо переносить свой опыт и аналогии с PHP на JS. Это разные языки. Разные до мозга костей. В PHP есть крапулька удачных механик из JS. В JS же нет ни капли от PHP. Вот этот момент разрулит 95% твоих проблем. Если используешь JS, то пользуйся им как JS, а не как PHP. Это другой язык. Состоящий из чистейшего рефлекшена и апофеоза абстрактности. То, что он ломает твои шаблоны - сугубо твоя проблема. Страусы не доятся. Прими это. Как и то, что функция может быть объектом и иметь свойства и методы.
    --- Добавлено ---
    Вот тебе пример со схемой создания объекта через явный return, а не через неявный возврат this. Я это тоже описывал. Мб такой механизм тебе понятнее будет. Они оба равнозначны.
    --- Добавлено ---
    А вот тебе третий вариант, вообще без конструктора. Такое тоже часто бывает полезно, если нам нужно собрать штучный объект, без фабрикования. Например, каркас модуля. Он уже не равнозначен первым двум. Он пишется "как есть", без шаблона как такового. Но от него, как и от любого другого объекта, можно наследоваться через прототипирование, да.
     
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    this по переводу это здесь, значит должен ссылатсья на себя же типа. Т есть то что есть внутри данной области видимости.
    Т.есть он ломает большинство шаблонных си подобных языков.
    --- Добавлено ---
    в php на каждый свой ключ своя инициализация функция это функция, класс это класс
    --- Добавлено ---
    Если думаешь что я не понимаю что такое ООП, то очень ошибаешься. Я хорошо понимаю что это такое. И мне никакой язык не нужен чтобы описать что такое класс и экземпляр класса(Объект)
    --- Добавлено ---
    я русскими словами выразиться могу что это такое
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    this по переводу - это не "здесь", а "этот".
    Вот, начинаешь понимать. Си-подобность, к слову, это не про парадигмы и шаблоны, это только про базовый синтаксис.
    Перестань использовать слово "ключ" невпопад. О каких ключах ты говоришь вообще? Ключ - это имя ячейки в ассоциативном массиве.
    Тебя сложно понимать из-за того, что ты говоришь на какой-то своей терминологии.
    Сказал человек, до этого говоривший про "объявление уникального ключа this". Плывешь. По яваскрипту в частности. Но делаешь выводы и безапелляционные мыслеизявления.
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    я имею ввиду зарезервированные слова. Которые используются при интерпритации или компиляции языка.
    --- Добавлено ---
    чутка ошибся с переводом. Но смысл тот же в данном случае
    --- Добавлено ---
    @Fell-x27 кстати такой вопрос. Не могу найти в инете. А во что интерпретируется php и js? в ассемблер?
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Да
    [​IMG]
     
    askanim нравится это.
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нет. Это не ассемблер. Это php-байткод. Который, в свою очередь, исполняется php-машиной. Непосредственно в ассемблер транслируются компилируемые языки, к которым ни JS, ни PHP не относятся.

    При этом JS, если не памятую, умеет в JIT-компиляцию. А вот PHP пока что нет. Обещают завезти в восьмой версии.
     
    askanim нравится это.
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    интерпретируется в ассемблер - вообще в корне неверная фраза. Интерпретация - это выполнение исходного кода, непосредственное. Хотя, php сейчас этим не занимается, а генерирует байт-код для своей машины (команды, которые выполняет программа-исполнитель, не напрямую процессор, в этом разница между php и тем же C, который компилируется в код, понятный непосредственно процессору). Но благодаря такой модели исполнения у нас есть огромное число возможностей, которые не доступны в компилируемых языках типа C++. То же создание экземпляра класса по имени из строки.
     
    askanim нравится это.
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mkramer На чём написана программа которая считывает байт код php ? И во что она его переводит дальше? php > байт код > программа считывающая байт код на Си++ > ассемблер > машинный код (логическая цепочка такая?)
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @askanim, на C написана, насколько я знаю. Она никуда не переводит, она его исполняет сразу. Т.е. процессор исполняет не код твоей программы, а код php-машины, исполняющий код твоей программы. Если интересно, поищи инфу, как пишутся интерпретаторы. Может быть полезно. Я когда-то делал на C++ интерпретатор подмножества паскаля (в качестве курсового проекта). Там правда был классический интерпретатор, без байт-кода.
     
    askanim нравится это.
  11. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    а понял программа то уже скомпилирована. Всё понял она сразу транслитит в процессор.
    --- Добавлено ---
    Спасибо крайне интересная информация.
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Процессор о твоей программе ничего не знает, он выполняет код php-машины.
     
  13. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    php-машины(программа которая считывает байт код и транслирует в процессор) правильно?
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Она ничего никуда не транслирует, она выступает в качестве, если хочешь, программного эмулятора процессора, и выполняет код. Ты же Зандстру читал, там у него шаблон Interpreter описан. Вот примерно тоже самое и происходит.
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Ну вот то, что на скрине, это результат работы дизассемблера. Надо проверить, как именно выглядит байтокод php. Некорректно говорить "интерпретация в ассемблер", но php-машина исполняет набор команд, очень похожий на ассемблер.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну тогда надо говорить, что это "ассемблер php-машины", не ассемблер CPU.
     
    askanim нравится это.
  17. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    всё за сим нарикаем его "ассемблер php-машины"
    --- Добавлено ---
    @mkramer ты кстате с vue разбирался?) Не знаешь как в компоненте скрипты писать чтобы они отрабатывали а не возмущались.
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Создай тему в соответствующем разделе форума, а то и так оффтоп сплошной тут.
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А как же opcache?
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хватит придумывать свои термины поверх существующих. То у тебя зарезервированные слова - это ключи, то байт-код это "ассемблер пхп-машины". Ты когда свою терминологию придумываешь и начинаешь на ней говорить, можешь сразу забыть о понимании со стороны другого программиста.

    Круто, что авторы его так назвали, только там в дескрипшине сказано:
    И да.
    Вот как то, что ты скинул и выглядит.
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Там до этого имелся в виду уже опкод, не исходник php, поэтому opcache-у не противоречит.
     
  22. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Каких объектов не будет? Переменная разве не объект?
    Статические методы - это функции, используемые в контексте класса, а если есть класс значит же есть ООП.
     
  23. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Функция is_object() скажет тебе, объект или нет.
    --- Добавлено ---
    Клёво! Можно выучить и кодить на опкодах))
     
    Sail нравится это.
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Можно. Но нет.
     
  25. vaajnur

    vaajnur Новичок

    С нами с:
    15 май 2017
    Сообщения:
    40
    Симпатии:
    3
    почему нет? Битрикс только так и написан)
    CIBlockElement::GetById()