За последние 24 часа нас посетили 21759 программистов и 1066 роботов. Сейчас ищет 701 программист ...

Как задать свойству класса значение переменной $_SERVER

Тема в разделе "PHP для новичков", создана пользователем Dasderdas, 16 окт 2022.

  1. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    Ещё один кринжовый вопрос новичка про ооп. Несмотря на то что $_SERVER является глобальной, я не могу задать $url_a её значение, как и любой другой стандартной глобальной переменной,
    хотя в методе можно это сделать. Короче, как такое сделать?
    PHP:
    1. class SwitchPage {
    2.     public $url_a = $_SERVER['HTTP_HOST']; //Не работает
    3. }
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    В конструкторе присваивай, и да, публичные свойства объекта -- зло.
     
  3. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    А если я хочу использовать не переменную а константу?
     
  4. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    И может я что-то делаю и так, но и таким образом тоже не выходит
     
  5. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    До сих пор в отладку не умеем?
    PHP:
    1. <?php
    2.  
    3. ini_set("display_errors", 1);
    4.  
    5. class SwitchPage {
    6.     public $url;
    7.  
    8.     public function __construct()
    9.     {
    10.         $this->url = $_SERVER['HTTP_HOST'];
    11.         var_dump($this->url);
    12.     }
    13. }
    14.  
    15. new SwitchPage();
    Если CGI дёргаешь, там нет никакого $_SERVER['HTTP_HOST'], естественно, если через веб-сервер, я чо-то пэ.
     
  6. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    Мне нужно использовать $url_a внутри других Статических функциях класса, вроде как с таких подходом это нельзя сделать
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    Почему про статику в первом посте топика ничего нет? Старайся точнее формулировать задачу )
    PHP:
    1. class SwitchPage
    2. {
    3.     public static $url;
    4.  
    5.     public static function init()
    6.     {
    7.         self::$url = $_SERVER['HTTP_HOST'];
    8.     }
    9. }
    10.  
    11. SwitchPage::init();
    Всё-таки рекомендую перечитать доку по классам. Статику вообще лучше избегать. И код оформлять по общепринятому стандарту (PSR-12: Extended Coding Style - PHP-FIG, rus-PSR/psr-12.md at master · MiklyxoMaklai/rus-PSR · GitHub).
     
    Dasderdas нравится это.
  8. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    Про статику и прочее, не писал сразу т.к, думал, что вопрос в заголовке может получить прямой ответ, без всяких методов. Но оказалось что тема сложнее. Мне уже не ловко говорить что ответы не подходят, что является моей ошибкой, т.к сразу не сформулировал вопрос, но если мы будем делать таким образом:

    то мы не сможет вызывать $url в других методах класса, что как и писал выше мне нужно, можем лишь в каждом методе заново регистрировать $url что максимально глупо, я пробовал вместо $url вызывать сам метод init(), но мало того что это маразм, т.к и всё что мы можем делать это возвращать то что делает метод init(), но не работать с тем что он возвращает.
     
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    @Dasderdas, толи лыжи не едут...
    PHP:
    1. class SwitchPage
    2. {
    3.     public static $url;
    4.     public static function init()
    5.     {
    6.         self::$url = $_SERVER['HTTP_HOST'];
    7.     }
    8.  
    9.     public static function foo()
    10.     {
    11.         var_dump(self::$url);
    12.     }
    13. }
    14. SwitchPage::init();
    15. SwitchPage::foo();
     
    Dasderdas нравится это.
  10. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    Спасибо, работает. Ну хоть и топорно каждый раз ручками вызывать метод init(), но видимо, другого решения и нет
     
  11. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    @Dasderdas, откажись от статики и размести инициализацию в конструкторе. Статика -- зло.
     
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Всё же просто. В пыхе можно инициализировать при объявлении поля только константой, а $_SERVER - переменная.