За последние 24 часа нас посетили 17107 программистов и 1597 роботов. Сейчас ищут 833 программиста ...

Пространства имен, как определить где?

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

  1. tors

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

    С нами с:
    22 мар 2010
    Сообщения:
    41
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3. use UmiCms\Service;
    4.  
    5. class Kss_fanexpressShophelpOrderPublic implements iModulePart {
    6.  
    7.   use baseModuleAdmin;
    8.   use tModulePart;
    9.  
    10. .
    11. .
    12. .
    13. }
    14. ?>
    Как определить в каких файлах объявлены пространства имен?
    (кроме поиска)

    Файл autoload.php :
    PHP:
    1. <?php
    2.  
    3. $classes = [
    4.     'fe_delivery' => [
    5.         __DIR__ . '/classes/fe_delivery/fe_delivery.php'
    6.     ],
    7.     'fe_shophelp' => [
    8.         __DIR__ . '/classes/fe_shophelp/fe_shophelp.php'
    9.     ],
    10.     'fe_queue_tasks' => [
    11.         __DIR__ . '/classes/fe_queue_tasks/fe_queue_tasks.php'
    12.     ],
    13.     'fe_jsonrpc_client' => [// Надо отключить
    14.         __DIR__ . '/classes/fe_jsonrpc/fe_jsonrpc_client.php'
    15.     ],
    16.     'fe_jsonrpc_response' => [// Надо отключить
    17.         __DIR__ . '/classes/fe_jsonrpc/fe_jsonrpc_response.php'
    18.     ],
    19.     'fe_kladr' => [
    20.         __DIR__ . '/classes/fe_kladr/fe_kladr.php'
    21.     ],
    22.     'fe_shopfans' => [
    23.         __DIR__ . '/classes/fe_shopfans/fe_shopfans.php'
    24.     ],
    25.     'fe_ishiping' => [
    26.         __DIR__ . '/classes/fe_shiping/fe_ishiping.php'
    27.     ],
    28.     'fe_shiping_collection' => [
    29.         __DIR__ . '/classes/fe_shiping/fe_shiping_collection.php'
    30.     ],
    31. ];
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.103
    Симпатии:
    1.243
    Адрес:
    там-сям
    Сам фреймворк их находит (авто-лоадит) и этого достаточно. Определять где какой файл это работа для машин, а не для людей. :)

    Нормальные IDE умеют индексировать весь проект и моментально находить класс. В PhpStorm, например, два раза нажимаешь Shift и потом набираешь имя класса, если надо с его пространством имён — он моментально показывает варианты в которые можно "провалиться". Или по Cmd+click на имени класса можно перепрыгнуть в его файл.

    Если тебя интересует как самому следовать стандартам, то почитай эти стандарты: https://svyatoslav.biz/misc/psr_translation/
    Про Umi не знаю, помоему это какая-то дрянь из 90-х и стандартам врядли следует.
     
  3. tors

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

    С нами с:
    22 мар 2010
    Сообщения:
    41
    Симпатии:
    0
    Что значит, когда нэймспейс юзается внутри класса?
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.103
    Симпатии:
    1.243
    Адрес:
    там-сям
    Ничего не значит. Неймспейс это часть имени.

    — Что значит, когда нэймспейс имя юзается внутри класса?
    — … ?
     
  5. Hovik

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

    С нами с:
    22 окт 2018
    Сообщения:
    89
    Симпатии:
    0
    namespace -> это путь к вашему классу в котором вы находитесь от корня а
    use -> это путь к той классе с которого хотите работать в нонешним классе
    проще говоря это метод в ооп подобному include
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.103
    Симпатии:
    1.243
    Адрес:
    там-сям
    Неймспейс это не метод и никак не подобен include. Это часть имени класса. В известном контексте эту часть имени можно НЕ упоминать. Она всё равно есть, но мы можем её пропустить при обращении к классам в том же неймспейсе.

    Команда use не выполняет никакой другой работы кроме как создаёт "псевдоним" для упомянутого класса чтобы опять же можно было обратиться к нему кратко. Ничего в самом use не инклудится.
    --- Добавлено ---
    Сферический пример:
    PHP:
    1. <?php
    2.  
    3. namespace App\Ololo;
    4.  
    5. use App\Zhopa\Piska; // в этот момент НИЧЕГО не выполняется. этого класса может вообще не существовать, ошибка не возникнет!
    6.  
    7. class Pysh // полное имя этого класса \App\Ololo\Pysh
    8. {
    9. ...
    10.   public function Foo()
    11.   {
    12.     // Ниже будет обращение к нескольким классам БЕЗ упоминания их неймспейса. Что  же произойдёт?
    13.  
    14.     echo Abracadabra::class; // Выведется "App\Ololo\Abracadabra" потому что неявно используется текущий namespace.
    15.     // А т.к. мы не создаём инстанс, класс не будет искаться и загружаться, ошибка не произойдёт даже если класс Abracadabra не существует!
    16.  
    17.     echo X\Y\Z::class; // Выведется "App\Ololo\X\Y\Z" потому что неявно используется текущий namespace. Снова неважно существует класс или нет.
    18.  
    19.     echo \X\Y\Z::class; // Выведется "X\Y\Z" потому что символ "\" в начале обнулил наш неймспейс
    20.  
    21.     $p = new Piska(); // PHP понимает что имеется в виду класс \App\Zhopa\Piska потому что выше был use для этого имени.
    22.     // Только в этот момент автолоадер попытается найти и загрузить файл с классом
    23.     // Если класса нет, то будет ошибка
    24.   }
    25. }
     
    #6 artoodetoo, 23 мар 2020
    Последнее редактирование: 23 мар 2020
    mkramer нравится это.
  7. Hovik

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

    С нами с:
    22 окт 2018
    Сообщения:
    89
    Симпатии:
    0
    artoodetoo Вы абсолютно правы но если человек вообще преставление не имеет о ооп то ему эти тонкости не чего не скажут , он прочитает ваши объяснение и ничего не поймет для чего импортируются пространство имен как может какой то класс наследоваться од другого класса и многое другое. Я очень надеюсь что он хот процедурный подход знает.
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.576
    Симпатии:
    1.759
    Гениально :) А я и не знал, что есть такая полезная штукенция
     
  9. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Подозреваю, что ни один программист не использует возможности шторма на 100%.
    Их там столько, что голова кругом. :)