За последние 24 часа нас посетили 17522 программиста и 1727 роботов. Сейчас ищут 1477 программистов ...

PHP функция

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

  1. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Потому что основное назначение замыканий - коллбэки. А-ля
    PHP:
    1. $d = 0;
    2. array_walk($arr, function ($e) use (&$d) {
    3.     $d += $e;
    4. });
    (это чисто пример, понятно, что сумму массива так никто не считает).
     
  2. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Я ща по всему коду своему пробежался и внатуре юзал ток на callback её в слиме. Когда надо было инстанс app в роутер передать.
    --- Добавлено ---
    какую я статью интересную нарыл:
    Замыкание на различных языках программирования
    --- Добавлено ---
    Походу на пыхе оно проще всего реализовано. В остальных же случаях как то тяжко к пониманию. А может от того что не до конца понимаю синтаксис...
     
    #27 askanim, 6 дек 2017
    Последнее редактирование: 6 дек 2017
  3. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    На JS ни каких use не требуется
     
    Fell-x27 нравится это.
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну в JS они крутые.
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    в js вообще область видимости переменных странная так что там когда функтион в функтион делаешь дочерняя функция видит всё что в родителе
    --- Добавлено ---
    ну потому что там нет глобальной переменной и когда пишешь var то переменная по умолчанию для данной области становится как глобальной. Подозреваю именно поэтому
     
  6. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Вообщето есть. Если не писать var то переменная будет доступна везде. При этом они как бы "становятся свойствами" переменной window.
     
  7. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Трудно понять это с точки зрения php - переменная как свойство переменной :)
     
  8. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Эм. оговорился. точнее будет свойство объекта.
     
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Все равно, в php свойства у класса а не объекта :)
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    создай два объекта одного класса.
    Потом определи значение свойства одного объекта и проверь значение этого же свойства у другого объекта.
    Кроме того, объект может существовать вообще без класса.
     
  11. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Гы. PHP позволяет отстрелить себе ногу множеством способов. Что такое test в примере ниже? (даже можете включить вывод всех варнингов и нотисов)

    PHP:
    1. class A {
    2.  
    3. }
    4. $a = new A();
    5. $a->test = '10';
    6.  
     
    #36 voral, 6 дек 2017
    Последнее редактирование: 6 дек 2017
  12. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    могу ошибаться, то вроде это underfiend property)
     
  13. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    пусть так, но "проперти" чего класса или объекта?
     
  14. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    а не так. Вот:
    Код (Text):
    1. object(A)#1 (1) { ["test"]=> string(2) "10" } Array ( )
    --- Добавлено ---
    test - свойство объекта.
     
  15. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    вот.
    @keren, вот вам и в PHP такое же. :) Только злоуптореблять этим не надо. В 99.9% случаев это будет говнокод (ИМХО)
     
  16. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Не, test это свойство класса в объекте класса :)
     
  17. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Не так то, конечно можно устроить демагогию :) и считать, что объект стал уже объектом другого - безымянного класса..
     
  18. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Да дело не в демагогии, мне трудно воспринимать когда что-то не по шаблону :)
     
  19. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Увы. Что PHP что JavaScript такие языки, что позволяют слишком много вольностей. В обоих дофига всего "не по шаблону". Именно по этому, я согласен с кем то из отписавшихся выше (вроде в этой теме) начинать изучать программирование надо не с PHP...
     
  20. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    @keren, свойства, если они не статические, именно у объектов, а не у классов. Пока не создашь объект, они не существуют. В JS же классов до недавнего времени в принципе не было, а объекты были.
    Глобальные переменные есть. В браузерном JS они становятся свойствами window, как уже было сказано, в серверном - я не в курсе, может быть там настоящие глобальные переменные. Но зато в JS есть вложенные функции, и на них распространяется механизм замыканий, поэтому они и видят локальные переменные родителей. Вложенные функции мне, как начинавшему с паскаля, было как раз легко понять.
     
  21. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Я понимаю что в итоге, но по теории объект обращается к свойствам своего класса.
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    По теории он создаёт экземпляр класса.
    --- Добавлено ---
    Если тебе это не о чём не говорит. То объект обращается к экземпляру своего класса, а не к классу который class. Собственно это вся суть ООП. Если ты этого не понимаешь тебе стоит почитать про это более детально.
    --- Добавлено ---
    и собственно говоря объект - это и есть экземпляр класса. Так что тут нужно просто понимать что происходит в момент создания нового объекта. Вообще нужно понимать что такое ООП. И не только в пыхе, а вообще везде. И мне так кажется что ты не понимаешь его вообще.
     
  23. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Почитал теорию, молодец :)
     
  24. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Дурачок! Я тебе подсказываю...
     
  25. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Потому что замыкания это особенность, которую несут в себе объекты типа closure. А объекты типа closure - создаются в виде анонимных функций.
    --- Добавлено ---
    Если не писать var, то при использовании строгого режима будет ошибка :)
     
    askanim нравится это.