За последние 24 часа нас посетили 26523 программиста и 1511 роботов. Сейчас ищет 851 программист ...

Namespace для дурачков

Тема в разделе "PHP для новичков", создана пользователем NerdRage, 28 дек 2016.

  1. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Я особо никогда не имел дело с неймспейсами, а тут скачал набор скриптов этот, там всё на неймспейсах (примеры там битые, можете даже не пытаться их использовать). Мой порядок действий:
    1. Я распаковал папку PHPStamp в корень своего тестового проекта.
    2. В корне создал test.php с содержимым из статьи на Хабре:
    3. В начало этого скрипта я добавил "namespace tests;", потому что потому что. Не знаю зачем, интуиция мне подсказала так.
    PHP:
    1. <?php
    2. namespace tests;
    3.  
    4. use PHPStamp\Templator;
    5. use PHPStamp\Document\WordDocument;
    6.  
    7. $cachePath = 'stuff/';
    8. $templator = new Templator($cachePath); // опционально можно задать свой формат скобочек
    9. // Для того чтобы каждый раз шаблон генерировался заново:
    10. $templator->debug = true;
    11.  
    12. $documentPath = 'stuff/document.docx';
    13. $document = new WordDocument($documentPath);
    14.  
    15. $values = array(
    16.     'simpleValue' => 'I am simple value',
    17. );
    18. $result = $templator->render($document, $values);
    19. $result->download();
    Итог:
    Код (Text):
    1. Fatal error: Uncaught Error: Class 'PHPStamp\Templator' not found in C:\MyStuff\WORK\OpenServer\domains\phpword\www\test.php:8 Stack trace: #0 {main} thrown in C:\MyStuff\WORK\OpenServer\domains\phpword\www\test.php on line 8
    Собственно, вопрос! Неймспейсы разве не подгружают за меня нужные файлики? Я сам должен делать require_once? Вот если я добавляю после "namespace tests;" это:
    PHP:
    1. require_once('PHPStamp/Templator.php');
    2. require_once('PHPStamp/Document/WordDocument.php');
    То скрипт вроде как крутится дальше, но всё-равно возникает ошибка:
    Код (Text):
    1.  Fatal error: Class 'PHPStamp\Document\Document' not found in C:\MyStuff\WORK\OpenServer\domains\phpword\www\PHPStamp\Document\WordDocument.php on line 12
    Тут или этот набор скриптов с Git битый/сырой, либо я что-то делаю не так (что более вероятно). Как правильно подключить этот набор скриптов с неймспейсами к своему говнокоду?
     
  2. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Кек, немспейс за тебя пишет логику, апает на релиз и выгружает отформатированные логи нджинкса.
    autoloader ?
     
  3. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    А, вон оно чо. Я раньше видел проекты на неймспейсах, там все файлы инклюдились автоматически и я думал, что так работает "use". Походу там где-то был зарыт autoloader. Сейчас попробую.
     
  4. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Короче я добавил в начале вот такую штуку и она работает как-то. Я не понимаю как, но работает.

    PHP:
    1. spl_autoload_register(function ($className) {
    2.    if (file_exists($className . '.php')) {
    3.       require_once $className . '.php';
    4.       return true;
    5.    }
    6.    return false;
    7. });
     
  5. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Советую вписать __DIR__
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    осваивай композер, у него есть автолоадер.
     
  7. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Конечно, прямо из репозитория :).
    Разумеется нет
     
  8. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Композер это ж какая-то хрень для скачивания всяких библиотек? Никогда не понимал какой в ней профит.
     
  9. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    одна команда и всё установлено, например Yii2
     
  10. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Не слушай этих, композер - прямая дорога в ад.
     
  11. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    почему?
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    профит в автозагрузчике, установщике и возможности все зависимости обновлять и накатывать.
     
  13. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Какие зависимости? Это Font Awesome что-ли? jQuery? Зачем их обновлять? Если всё работает - не трогай.
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если твой горизонт интересов ограничивается ими, то конечно, композер тебе не всрался.
     
  15. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Подход композера "зачем изобретать велосипед, если есть вундервафля танк + мотоцикл + два велосипеда, но крутить уже не ногами"
    Если конкретно, то это избыточность, которая кушает производительность.
     
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Там богатый выбор библиотек, можно найти и велосипед с педалями.
     
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Как правило мотоцикл получается не просто так, а в ходе тестирования и допиливания велосипеда. К примеру, надо утянуть почту по imap и забрать вложения, в теории всё просто, берешь imap_* и качаешь что нужно. На практике же есть криво составленные заголовки, тело письма, через жопу оформленные аттачи и в результате получается тот же самый мопед, но с кучей доморощенных костылей и отовсюду вылезающими ошибками.
    Но до тех пор, пока не встала задача обрабатывать потоком тысячи писем, попутно конвертируя что нужно и раскладывая по полочкам - можно пилить и свои велосипеды, в наивной уверенности что оно будет лучше и быстрее )