За последние 24 часа нас посетили 21902 программиста и 988 роботов. Сейчас ищут 628 программистов ...

Передача параметров в static method?

Тема в разделе "PHP для новичков", создана пользователем 1Feniks1, 10 июн 2020.

Метки:
  1. 1Feniks1

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

    С нами с:
    27 дек 2013
    Сообщения:
    93
    Симпатии:
    1
    Здравствуйте!.

    Будет ли правильно передавать параметры в static method? Или это не желательно?

    Пример кода:
    PHP:
    1. class Output
    2. {
    3.     private $header = array();
    4.  
    5.     public static function set_head( $header )
    6.     {
    7.        
    8.     }
    9.     public static function get_head()
    10.     {
    11.  
    12.     }
    13. }


    Несколько дней назад мне сделали замечания, что передавать параметры в метод нельзя, если он статик и вот я не много, не могу понять...
    В laravel так делают и примеров в интернете хватает тоже, может просто я кое что упустил и не совсем понял...
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Или вам сказали хрень, или вы неправильно поняли. Касательно вашего наброска - поле header у вас не static, поэтому из статического метода его поменять не выйдет, имейте в виду.
     
    1Feniks1 нравится это.
  3. 1Feniks1

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

    С нами с:
    27 дек 2013
    Сообщения:
    93
    Симпатии:
    1
    Оу... это я уже опечатку сделал, просто..
    Большое Спасибо, за ответ!.)))
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    1. В Laravel все static-вызовы - это фасад для доступа к тем или иным объектам находящимся в контейнере.
    2. Главная проблема static, singleton и прочих реинкарнаций god object в том, что они накапливают в себе сайд-эффекты. Другими словами, вы не можете рядом держать ещё один экземпляр такого объекта, потому что у вас нет точки контроля над происходящими с ними изменениями в коде. К примеру в том же Laravel, нельзя в Application просто так передать новый Request, т.к. в некоторых местах остаются старые данные, которые фреймворк будет использовать при новом запросе. Вам придется принудительно очистить эти места вручную. Такой механизм реализован в laravel-swoole, где однажды созданный $app обрабатывает множество запросов от сервера, и если к примеру между вызовами не сбросить AuthService, то возможна ситуация, когда пользователь получит доступ к данным другого, пришедшего ранее пользователя. Такой вот внезапный говнокод ))
    3. Передаете вы параметры или нет в static method - не важно, главное что вы потом с этими данными делаете. Если метод хм... чистый - передавайте что угодно, если нет - ваш код пахнет ))
     
    AlexProg, 1Feniks1, Ganzal и ещё 1-му нравится это.
  5. 1Feniks1

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

    С нами с:
    27 дек 2013
    Сообщения:
    93
    Симпатии:
    1
    Большое спасибо за детали!)))))
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    не то чтоб мы тут прям лысого гоняем на рейтинг, но "палец вверх" будет неплохим выражением благодарности автору)))
     
    1Feniks1 нравится это.
  7. 1Feniks1

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

    С нами с:
    27 дек 2013
    Сообщения:
    93
    Симпатии:
    1
    Уже)))
     
    romach нравится это.