My Keymap for PhpStorm

The article was last updated on 2017–01–18

Over the many years I have been using PhpStorm I have made a lot of changes to the default keymap to make it easier to remember and use. The following tables sum up the most important keyboard shortcuts I personally use.

The entire keymap is also available for download.

Navigation

Ctrl + E go to almost anything
Ctrl + R go to method of current class
Ctrl + O go to class
Ctrl + Shift + O go to symbol
Ctrl + P go to file
Ctrl + Shift + P go to action or setting
Ctrl + Alt + P go to another project
Ctrl + B go to declaration
Ctrl + G go to line
Alt + Left go back
Alt + Right go forward

User Interface

F12 hide all windows
F11 jump to last window
F10 show settings
Alt + 1 toggle project view
Alt + 8 toggle database view
Alt + Home show navigation bar
Ctrl + Num 6 split vertically
Ctrl + Num 2 split horizontally

Writing Code

Generating
Ctrl + Space code completion
Ctrl + Enter complete statement
Ctrl + J surround with
Ctrl + Shift + J insert live template
Ctrl + M clone line
Alt + Insert generate (override methods, getters, setters…)
Refactoring
Ctrl + T, T refactor popup
Ctrl + T, R rename
Ctrl + T, I inline
Ctrl + T, F extract field
Ctrl + T, V extract variable
Ctrl + T, M extract method
Ctrl + T, C extract constant
Ctrl + T, S change signature
Ctrl + Shift + Up move statement up
Ctrl + Shift + Down move statement down
Alt + Shift + Up move line up
Alt + Shift + Down move line down
Getting info
Ctrl + I show parameter info
Ctrl + U find usages
Selecting text
Alt + Up extend selection
Alt + Down shrink selection
Ctrl + D select next occurrence
Ctrl + Shift + D unselect next occurrence
Ctrl + N clone caret to line below
Ctrl + Shift + N clone caret to line above

Installation

Download phpstorm-keymap-2017.jar and in the main menu select File → Import Settings

Bonus: Download phpstorm-live-templates-2017.jar

Článek byl publikován 18. 1. 2017 10:45

Problematika hierarchie a použití výjimek v PHP

Zdroje

Doporučuji přečíst nejprve následující dva články a kouknout na existující výjimky, které jsou definovány v SPL v PHP.

Obecné rozdělení výjimek

  • Usage error (důležitý je text výjimky, nikoliv typ; lze mu předejít na místě, kde je metoda volána)
  • System error
    • Logical error (důležitý je typ výjimky pro přesné zachytávání; nelze jim předejít)
    • System failures (nezachytávají se)

(Podrobněji je to popsáno v prvním výše odkázaném článku.)

Výjimky v PHP

  1. Dynamic call
  2. Runtime = nelze zachytit kontrolou argumentů
  3. Logic = neplatný argument

(Podrobněji popsáno v druhém výše odkázaném článku.)

Logic

  1. DomainException (value does not adhere to a defined valid data domain)
  2. InvalidArgumentException (an argument does not match with the expected value)
  3. LengthException (length is invalid)
  4. OutOfRangeException (value does not match with a range)

Runtime

  1. OutOfBoundsException (value is not a valid key)
  2. OverflowException (adding an element into a full container)
  3. RangeException (an invalid range is given)
  4. UnderflowException (trying to remove an element of an empty container)
  5. UnexpectedValueException (value does not match with a set of values)

Ukázkový příklad

V třídě RegistrationManager existuje metoda activateUser, která slouží k aktivaci účtu uživatele pomocí odkazu, který dostane po registraci e-mailem. Metoda má dva parametry – $userId a $activationKey.

Seznam problémů, které mohou nastat

  1. Parametry mají nesprávný tvar. (Např. $userId není číslo nebo $activationKey nemá správný počet znaků.)
  2. Uživatel s daným $userId neexistuje.
  3. Uživatel s daným $userId má účet již aktivovaný.
  4. Aktivační klíč je neplatný.

Požadavky na řešení

  1. Při odchytávání chyb musí být možné od sebe jednotlivé chyby jednoznačně rozlišit.
  2. Zprávy ve výjimkách jsou pro programátora. Informační texty pro uživatele se sestavují až v presenteru a nesmí být závislé na zprávách ve výjimkách.

Rozbor jednotlivých problémů

Parametry mají nesprávný tvar

  • Usage error → Logická chyba
  • Použil bych InvalidArgumentException (SPL) s popisnou zprávou.
  • Pro nesprávný počet znaků v parametru $activationKey by šla použít i LengthException, ale vadí mi, že nedědí od InvalidArgumentException.

Uživatel s daným ID neexistuje

  • Runtime chyba
  • Nelíbí se mi žádná výjimka z SPL ani z Nette. (Pokud bych si musel vybrat, tak nejbližší mi přijde UnexpectedValueException z SPL a InvalidStateException z Nette.)
  • Vytvořil bych tedy nějakou vlastní výjimku, asi EntityNotFoundException (extends RuntimeException). Napadá vás nějaký lepší název?

Uživatel s daným ID má účet již aktivovaný

  • Runtime chyba
  • Použil bych asi InvalidStateException (Nette). UnexpectedValueException z SPL by ale asi taky šla, ale kolidovala by s výjimkou pro neplatnost aktivačního klíče.

Aktivační klíč je neplatný

  • Runtime chyba
  • Použil bych asi UnexpectedValueException (SPL), ale nejsem si moc jist, zda to odpovídá její definici (a value does not match with a set of values). Spíš by seděla definice z InvalidArgumentException (an argument does not match with the expected value), jenomže ta nedědí od RuntimeException.
  • Nebo vytvořit novou výjimku InvalidActionKeyException?

Další poznámky

  • V PHP lze kromě typu výjimky rozlišovat jednotlivé chyby i pomocí chybového kódu. To např. C# nemá. Nepodařilo se mi najít žádnou Best Practice, jak s kódy výjimek pracovat.
  • Co dělat v případě, že v metodě jsou dvě místa, kde může dojít k EntityNotFoundException a potřebujeme je rozlišit?
    1. Použít kód výjimky jako prosté číslo – fuj!
    2. Použít kód výjimky jako konstantu RegistrationManageru – asi můj favorit
    3. Použít kód výjimky jako konstantu potomka EntityNotFoundException – Jak se bude jmenovat? Stejně s rozlišením pomocí jmenných prostorů?
    4. Vytvořit dvě nové výjimky dědící od EntityNotFoundException
  • V budoucnu se mohou objevit další místa, kde bude vhodné vyhodit stejnou výjimku, jako na nějakém jiném řádku. Není lepší od začátku všude rvát kódy výjimek? S tím souvisí otázka, kam s konstantami, které tyto kódy reprezentují.

Jak řešíte problematiku použití výjimek vy? Řešili byste ukázkový příklad jinak?

Článek byl publikován 31. 12. 2010 02:33

Navigace


Kontakt

Jan Tvrdík
ICQ: 238-999-481
MSN: jan.tvrdik@live.com