1

Тема: Особливості IDE PhpStorm

Оскільки немало бачив реклами про PhpStorm, то вирішив прицінитись до цієї IDE (не такі вже й великі гроші $100 - її ціна, головне щоб було за що).

Оскільки я раніше працював лише з IDE NetBeans v7*, то в основному мабуть хочу розпитати "а як це можна зробити в PhpStorm".

Ну перше - цікаво як можна проглянути структуру класу (список його властивостей, методів, та їх модифікатори доступів)

2 Востаннє редагувалося ktretyak (12.02.2014 03:18:30)

Re: Особливості IDE PhpStorm

Ага, вже побачив здається "як можна проглянути структуру класа": Ctrl+F12 або "Navigate->File Structure".
Це далі "заховано", ніж в NetBeans, в якому можна (підключивши View->Show breadcrumbs) зразу бачити в якому місті, в структурі класа, знаходиться курсор миші, та клікнувши на символі > можна побачити весь список методів та властивостей.
Також далі "заховано" можливість відкривання дерева каталогів, щоб побачити де знаходиться поточний відкритий файл. В NetBeans можна робити це синхронно з переглядом (View->Synchronize Editor with Views).

3 Востаннє редагувалося ktretyak (12.02.2014 09:09:29)

Re: Особливості IDE PhpStorm

Дивно, що шторм не підсвічує початок і кінець блоку кода, який зазвичай використовується у вьюхах:

<?php if($user_logged_in):?>
Привіт
<?php endif ?>

...
Ха, шторм досить невпевнено себе почуває взагалі з таким синтаксисом, причому інколи помиляється підкреслюючи правильні блоки як неправильні. З NetBeans такого не було жодного разу...

4

Re: Особливості IDE PhpStorm

1 як можна проглянути структуру класа Alt+7  (Alt+<номер>) різні вікна показуються ;)
2. Якщо я вас правильно зрозумів про "зразу бачити в якому місті, в структурі класа, знаходиться курсор миші" тоді ось скріншот
http://i7.minus.com/j3JgpIymEmlmk.png
Курсор миші у методі prepareConfigFileForInstall зверху у нас іпоказується в якому ми класі і в якому методі зараз знаходиться курсор ;)

3. "Також далі "заховано" можливість відкривання дерева каталогів, щоб побачити де знаходиться поточний відкритий файл" Нажимаємо Alt+1 відкривається дерево файлів проекту. У налаштуваннях вікна проекту (шестерня) вибираємо
Autoscroll from Source i  Autoscroll to Source
Ці опції пашуть по наступному принципу. Ви через Alt+tab або ще якось переключається в інший файл і він автоматично вибирається у проекті. Або навпаки. У проекті вибираєте файл і він автоматично відкривається (одинарний клік на файлі)

Про підсвітку блоку через запис if: endif у мене також не підсвічує. Завжди користуюсь If(){} але думаю можливо варто погуглити дане питання ;)

5

Re: Особливості IDE PhpStorm

funivan написав:

1 як можна проглянути структуру класа Alt+7  (Alt+<номер>) різні вікна показуються ;)

Так, це я хотів був знайти спочатку, дякую

funivan написав:

2. Якщо я вас правильно зрозумів про "зразу бачити в якому місті, в структурі класа, знаходиться курсор миші" тоді ось скріншот

скріншот
http://i7.minus.com/j3JgpIymEmlmk.png

Курсор миші у методі prepareConfigFileForInstall зверху у нас іпоказується в якому ми класі і в якому методі зараз знаходиться курсор ;)

Майже правильно зрозуміли, але я говорив ще й про список властивостей та їх методів:

скріншот
https://lh5.googleusercontent.com/-LQ14zeeUeOc/UvubNgo039I/AAAAAAAAAmk/x-YezavYTJk/w722-h614-no/breadcrumbs.jpg
funivan написав:

3. "Також далі "заховано" можливість відкривання дерева каталогів, щоб побачити де знаходиться поточний відкритий файл" Нажимаємо Alt+1 відкривається дерево файлів проекту. У налаштуваннях вікна проекту (шестерня) вибираємо
Autoscroll from Source i  Autoscroll to Source
Ці опції пашуть по наступному принципу. Ви через Alt+tab або ще якось переключається в інший файл і він автоматично вибирається у проекті. Або навпаки. У проекті вибираєте файл і він автоматично відкривається (одинарний клік на файлі)

Це також саме те, про що я питав, дякую

funivan написав:

Про підсвітку блоку через запис if: endif у мене також не підсвічує. Завжди користуюсь If(){} але думаю можливо варто погуглити дане питання ;)

Та мало того що не підсвічує, а ще й помиляється. В моєму розумінні - такого не повинно бути, якщо безкоштовні IDE із цим справляються

П.С.
А взагалі зачотна азіатка на головній сторінці сайту, де ви розмістили свій скріншот ;)

6

Re: Особливості IDE PhpStorm

Проглянув гарячі клавіші скрін
але щось так і не побачив як можна виділений блок текста взяти в дужки (в NetBeans це робиться натисненням відповідної лівої відкриваючої дужки [ ( або лапки ' "

7

Re: Особливості IDE PhpStorm

Шторм гірше розуміє взаємозв'язки між об'єктами.
Наприклад наступний код досить неоднозначний для обох IDE, бо метод моделі, в даному випадку factory(), може повертати різні значення в залежності від наданих параметрів.
Але при спробі прослідкувати де оголошений метод get_content(), NetBeans хоча б розуміє, що це стосується класу моделі (в той час як шторм не розуміє куди копати):

$obj_model = Model::factory('Statistic');
        
$content = $obj_model->get_content();

8 Востаннє редагувалося ktretyak (13.02.2014 09:55:26)

Re: Особливості IDE PhpStorm

Шторм не бачить помилок, там де вони є (в той час як нетбінс чітко визначає їх):

$var = & $var = '123';
П.С.
Шторм мені напідказував падлюка, що можна замінити стиль запису array(1, 2, 3) на [1, 2, 3]. Я радий старатись почав використовувати цей стиль, і на локальній машині все чудово працювало, але коли я зааплоадив на свій хост, то сайт трохи ліг-полежав. Причому швиденько повиправляти це не можна, бо повно кругом квадратних дужок, а регулярку так сходу і не придумаєш =)

9

Re: Особливості IDE PhpStorm

Майже правильно зрозуміли, але я говорив ще й про список властивостей та їх методів:

Ось вивід структури ;) Походу так само як і в нетбінс

Прихований текст
http://i5.minus.com/jM8HwM6hMkdUw.png

Та мало того що не підсвічує, а ще й помиляється. В моєму розумінні - такого не повинно бути, якщо безкоштовні IDE із цим справляються

Скидуйте скріни. І кажіть що не так ;)

але щось так і не побачив як можна виділений блок текста взяти в дужки (в NetBeans це робиться натисненням відповідної лівої відкриваючої дужки [ ( або лапки ' "

Ctrl+[  - перейти на початок блоку
Ctrl+]  - перейти на кінець блоку

Ctrl+Shift+[  - виділити від курсору до початок блоку
Ctrl+Shift+]  -  від курсору до кінця блоку
Я написав маркорс який виконює ці 2 дії і повішав на 1ну клавішу

Шторм гірше розуміє взаємозв'язки між об'єктами.
Наприклад наступний код досить неоднозначний для обох IDE, бо метод моделі, в даному випадку factory(), може повертати різні значення в залежності від наданих параметрів.
Але при спробі прослідкувати де оголошений метод get_content(), NetBeans хоча б розуміє, що це стосується класу моделі (в той час як шторм не розуміє куди копати):

    $obj_model = Model::factory('Statistic');
    $content = $obj_model->get_content();

Я думаю правильно робить шторм. Ось чому. Якщо ви почнете робити рефакторінг і netbeans сам буде догадуватись що повертає і одного разу не вгадає тоді побачите що краще точно знати що є що ;)
+ для таких випадків у рнрштормі передбачина одна фішка. Ми можете задати масив що наприклад ось цей метод з цього класу коли передаєш 1н параметр повертає ось цю модель =) і все ;)

$var = & $var = '123';

А яка тут помилка має бути?

Шторм мені напідказував падлюка, що можна замінити стиль запису array(1, 2, 3) на [1, 2, 3]. Я радий старатись почав використовувати цей стиль, і на локальній машині все чудово працювало, але коли я зааплоадив на свій хост, то сайт трохи ліг-полежав. Причому швиденько повиправляти це не можна, бо повно кругом квадратних дужок, а регулярку так сходу і не придумаєш =)

Ну ви ж програміст а не прибиральниця. Ви маєте знати що запис для масиву [] ще не на всіх хостингах появився так як працює тільки у новій версії рнр =))

Подякували: miroslav.chandler1

10 Востаннє редагувалося ktretyak (18.02.2014 11:22:31)

Re: Особливості IDE PhpStorm

Для документування в коді PHP в списку хелпера шторма всього 6 тегів? Тут навіть немає, наприклад, тега @author. Чи це я вже просто випав з мейнстріма і документування коду вже не модно?

Також якось дивно, що по дефолту, відсутня підтримка стандартних F2 (при перейменуванні файла), Ctrl+Y (протилежна дія до Ctrl+Z)... Миттєве і постійне автоматичне збереження без натиснення кнопки зберегти (чи Ctrl+S) також не стандартно і поки що також сумніваюсь в доречності робити це по дефолту...

11

Re: Особливості IDE PhpStorm

Для документування в коді PHP в списку хелпера шторма всього 6 тегів? Тут навіть немає, наприклад, тега @author. Чи це я вже просто випав з мейнстріма і документування коду вже не модно?

Після 6 місяців роботи в штормі я замітив що всього навсього 6 тегів. Автоматом він генерить все що треба.
Для себе я зробив ось таку штуку. Автор вставляється автоматично коли створюю файл. Також можна додати будь що для документації класів, методів і інше.

Прихований текст
http://i5.minus.com/jb1kglqEj4RnnU.png

Також якось дивно, що по дефолту, відсутня підтримка стандартних F2 (при перейменуванні файла), Ctrl+Y (протилежна дія до Ctrl+Z)... .

Переназначайте собі як хочете. Тут сама гнучка система гарячих клавіш яку я бачив. Те що вони не такі як вам треба це не проблема, для мене також не такі. Я зайшов і переназначив. Якщо є можливість поставити свої клавіші - значить проблеми немає.

Миттєве і постійне автоматичне збереження без натиснення кнопки зберегти (чи Ctrl+S) також не стандартно і поки що також сумніваюсь в доречності робити це по дефолту..

Це була основна з причин чому я не переходив на шторм. Але перейшов. Які переваги цієї фішки.
1. Можна налаштувати.
2. Якщо файли автоматом завантажуються на робочий проект - більше замислюєшся як правильно написати ту чи іншу фішку.
3. Пару раз у вас пропаде світло тоді ви зроузмієте всю суть цієї фішки ;)

Переваги він приносить більші ніж недоліки ;)

12 Востаннє редагувалося ktretyak (20.02.2014 09:27:33)

Re: Особливості IDE PhpStorm

Нарешті я знайшов в штормі щось корисне! Це - перевідкриття закритих закладок (чого здається немає в нетбінсі).
Але... невже в штормі не можна шукати текст у вибраному каталозі проекта?
...
Шторм негативно впливає на роботу Windows провідника - він починає інколи глючити з ним.
...
Тільки якщо шторму вставляєш на одній сторінці код:

<?php

class MyException extends Exception{
    
    public static function factory($class, $message, $code)
    {
        return new $class($message, $code);
    }
    
    public function __construct($message, $code)
    {
        parent::__construct($message, $code);
    }
}

throw MyException::factory('MyException', 'Текст помилки', 404);
?>

то він розуміє, що є зв'язок між MyException та Exception. Якщо ж це рознести на різні сторінки, то він втрачає зв'язок..., а тому лається, що об'єкт MyException має бути інстансом Exception. Позор...

13

Re: Особливості IDE PhpStorm

Але... невже в штормі не можна шукати текст у вибраному каталозі проекта?

вибираєте директорію і ctrl+shift+f
або у файлі просто ctrl+shift+f вам покажуться опції. В проекті, по усіх файлах, в конкретній директорії, маска для файлів і інше ;)

14

Re: Особливості IDE PhpStorm

funivan написав:

Але... невже в штормі не можна шукати текст у вибраному каталозі проекта?

вибираєте директорію і ctrl+shift+f
або у файлі просто ctrl+shift+f вам покажуться опції. В проекті, по усіх файлах, в конкретній директорії, маска для файлів і інше ;)

В тому то і фігня, що багато стандартних гарячих клавіш непрацюють. Чому б це не залишити просто Ctrl+F...

15

Re: Особливості IDE PhpStorm

throw MyException::factory('MyException', 'Текст помилки', 404);

я дивлюсь вам геть скучно)
Для чого такі заморочки з ексепшинами? киньте нормальний ексепшин і не буде проблем )) + зрозуміліше)

Ці файли в 1му проекті знаходяться?

16

Re: Особливості IDE PhpStorm

В тому то і фігня, що багато стандартних гарячих клавіш непрацюють. Чому б це не залишити просто Ctrl+F...

як на мене логічно. ctrl+f - пошук у файлі ctrl+shift+f - по усьому проекту.
Якщо я правлю файл, у ньому є фраза яку я хочу знайти по всьому проекту я її виділяю і натискаю ctrl+shift+f дальше ентер і все шукає)
;)

17

Re: Особливості IDE PhpStorm

funivan написав:
throw MyException::factory('MyException', 'Текст помилки', 404);

я дивлюсь вам геть скучно)
Для чого такі заморочки з ексепшинами? киньте нормальний ексепшин і не буде проблем )) + зрозуміліше)

Та чому заморочки, це все нормальні виклики кастомних винятків. Ви якось по іншому з цим справляєтесь?

funivan написав:

Ці файли в 1му проекті знаходяться?

Зрозуміло, що в одному проекті...

18

Re: Особливості IDE PhpStorm

funivan написав:

як на мене логічно. ctrl+f - пошук у файлі ctrl+shift+f - по усьому проекту.
Якщо я правлю файл, у ньому є фраза яку я хочу знайти по всьому проекту я її виділяю і натискаю ctrl+shift+f дальше ентер і все шукає)
;)

Нетбінс має точно такий самий функціонал в цьому плані зі стандартним Ctrl+F.

19

Re: Особливості IDE PhpStorm

Та чому заморочки, це все нормальні виклики кастомних винятків. Ви якось по іншому з цим справляєтесь?

Так я по іншому, так само як і зенд )

throw new Exception\InvalidArgumentException(
                        sprintf('Autoloader class %s must implement Zend\\Loader\\SplAutoloader', $class)
                   );

І ще одне:

  class CustomException extends Exception {

  }

  throw new CustomException('Текст помилки', 404);

Чим ваш код кращий за мій, або що він робить особливого як для кінцевого користувача. Чому я б рекомендував писати так як я навів приклад:
1 - ви чітко знаєте що повертається не дивлячись у реалізацію клас.
2. Менше коду.
3. Менше помилок
4. Легше підтримувати

І на останок:

Для чого це писати?

 public function __construct($message, $code)
{
parent::__construct($message, $code);
}

p.s.
https://github.com/zendframework/zf2/bl … ry.php#L85

20 Востаннє редагувалося ktretyak (20.02.2014 10:09:38)

Re: Особливості IDE PhpStorm

Це все пишеться один раз "складно" лише для того, щоб потім можна було цим користуватись ось так:

throw HTTP_Exception::factory(404, "Запрошений URL ':uri' не знайдено на даному сервері.")

ну і далі цей же самий клас і метод використовується, але вже для іншого випадку:

throw HTTP_Exception::factory(401, 'Необхідна авторизація')

Вигода - менше класів треба застосовувати.
...

Доречі, передивився я код по лінкові що ви дали, то частина кода класа Exception\InvalidArgumentException ще ж не показана

throw new Exception\InvalidArgumentException(
                        sprintf('Autoloader class "%s" not loaded', $class)
                    );