PSR-1/PSR-2/PSR-12๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ ์๋์ ๊ท์น์ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ๋ฅธ๋ค.
์ต์ ์ง์ ๋ฒ์ ์ 7.1์ด๋ค.
- ๋ณ์๋ช
์
$snake_case
๋ก ์์ฑ- ์ด๋ PSR-1 4.2. Properties ๊ท์น์ ๋ณด์ํ ๊ฒ์ด๋ค.
- private ํจ์๋ ๋ณ์๋ช
์
_
(underscore) prefix๋ ๋ถ์ด์ง ๋ง ๊ฒ
- ์๋ก ์์ฑํ๋ ํ์ผ์
declare(strict_types=1)
์ ์ฉ - PHPDoc๋ณด๋ค ๋ด์ฅ ํ์ ํํ ์ ์ฐ์ ํ์ฌ ์ฌ์ฉ
- ์ฉ๋์ ๋ฐ๋ฅธ
null
/false
์ ์ฌ์ฉfalse
๋ boolean ํ์์ ํํ์๋ง ์ฌ์ฉnull
์ "๊ฐ์ด ์์"์ ์๋ฏธํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ- ์ด๊ธฐ PHP ๋ด์ฅ ํจ์์
false
๋ฅผ ๋ฆฌํดํ๋ ๊ด๋ก๋ฅผ ๋ฐ๋ฅด์ง ๋ง ๊ฒ
- ๋ ํผ๋ฐ์ค(
&$var
)์ ์ฌ์ฉ- ์ฐธ์กฐ ๋ฐํ์ ์ฌ์ฉํ์ง ๋ง ๊ฒ
- ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ closure ๋ณ์ ๋ฐ์ธ๋ฉ๋ง ํ์ฉ
$db->transactional( function () use (&$output) { $output = false; } );
- ๋น ๊ฐ์ ์ฒดํฌํ๋ ๊ฒฝ์ฐ
empty()
ํจ์ ์ฌ์ฉ- ์ฐธ๊ณ :
empty
,isset
,is_null
ํจ์์ ์กฐ๊ฑดํ
- ์ฐธ๊ณ :
- ์ฐธ์กฐํ๋ ค๋ ๋์์ด ๋ช
๋ฐฑํ ์ด๊ธฐํ๋ ๊ฒฝ์ฐ
isset()
ํจ์ ์ฌ์ฉ ๊ธ์งisset
์ undefined์NULL
์ ๊ตฌ๋ถํ ์ ์๊ธฐ ๋๋ฌธ
compact()
/extract()
์ฌ์ฉ ๊ธ์ง- ์ ์ธ๋์ง ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ๊ฒฝ์ฐ ์ด๋ค ์ค๋ฅ๋ ๋ฐ์ํ์ง ์์
- ๋ณ์๋ฅผ ์๋ฌต์ ์ผ๋ก ์ฐธ์กฐํ๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ด๋ ค์
- ''๊ณผ ""์ ์ฌ์ฉ
- escape์ด ์ ๊ฒ ์ฌ์ฉ๋๋ ์ชฝ์ ์ฌ์ฉ
- ์)
'I will be back.'
"I'll be back."
- https://secure.php.net/language.types.string
- ํ
ํ๋ฆฟ ๋ฌธ์์ด์์ curly brace(
{"$var"}
)์ ์ฌ์ฉ- IDE์์์ ์ฝ๊ฒ ์๋ณ์ด ๊ฐ๋ฅํ๋ฏ๋ก, ํ์ํ ๊ฒฝ์ฐ์๋ง ๊ดํธ๋ก ๊ฐ์ ๊ฒ
==
/===
์ ์ฌ์ฉ- ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์
===
๋ฅผ ์ฌ์ฉ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ง==
๋ฅผ ์ฌ์ฉ
- ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์
- ์ผํญ ์ฐ์ฐ์ ์ฌ์ฉ
- ์ฐ์ฐ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ๊ดํธ๋ฅผ ์ฌ์ฉ
next_page = ($end_page === $total_pages) ? $end_page : ($end_page + 1);
- ์ฐ์ฐ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ๊ดํธ๋ฅผ ์ฌ์ฉ
- ๊ธด ์กฐ๊ฑด๋ฌธ
&&
,||
๋ฑ์ ๊ฐ์ฅ ์์ ์์น์ํฌ ๊ฒ- ์กฐ๊ฑด๋ฌธ์ด ์ฌ๋ฌ์ค์ผ ๊ฒฝ์ฐ ๋ซ๋ ๊ดํธ์ brace๋ ์๋ก์ด ์ค์ ์์น์ํฌ ๊ฒ
if (someCondition1 !== null && someCondition2 !== null && someCondition3 !== null ) { /* ... */ }
- Error Control Operator(
@
) ์ฌ์ฉ ๊ธ์ง
- ํญ์ short array ๋ฌธ๋ฒ(
[]
)์ ์ฌ์ฉํ ๊ฒ
- Late Static Bindings ์ฌ์ฉ ๊ธ์ง
์์กด์ฑ ๊ด๋ฆฌ (Composer)
- ํจํค์ง ๋ค์์คํ์ด์ค๋ย
ridibooks
ํน์ridi
์ฌ์ผ ํจ - ๊ณต๊ฐ์ฉ ํจํค์ง๋ @ridi/performance ํ์ ์์ฒญํ์ฌ Packagist์ ๋ฑ๋ก
- ๋ฑ๋ก๋ ํจํค์ง๋ Auto Update ๊ธฐ๋ฅ์ ํ์ฑํํ๊ณ
ridi
๋ฅผ ๋ฉ์ธํ ์ด๋๋ก ์ถ๊ฐํ ๊ฒ
- ๋ฑ๋ก๋ ํจํค์ง๋ Auto Update ๊ธฐ๋ฅ์ ํ์ฑํํ๊ณ
- ๋ด๋ถ์ฉ ํจํค์ง๋ Satis์์ ๊ด๋ฆฌ (README ์ฐธ๊ณ )
- ๋ฐฐํฌ๋๋ ๋ฒ์ ์ ๋ฐ๋์ ๋ช
์์ ์ธ Git ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์
- ์ปค๋ฐ ๋ ํผ๋ฐ์ค(
#commit-ref
)๋ฅผ ํตํ ๋ฒ์ ๊ด๋ฆฌ๋ Composer์์ ์ฌ์ฉํ์ง ๋ง ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ - Composer์ ํ๊ทธ ๋ช ๋ช ๊ท์น์ ์ฐธ๊ณ
- ์ปค๋ฐ ๋ ํผ๋ฐ์ค(
- ๋ฒ์ ๊ด๋ฆฌ ์ ์ฑ
์ Semantic Versioning์ ๋ฐ๋ฅผ ๊ฒ
- SemVer๋ฅผ ํตํด ์ด ํจํค์ง์ ์์กดํ๋ ์ฌ์ฉ์๋ค์๊ฒ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ๋ฒ๊ทธ ํฝ์ค, ๋๋ ํ์ ํธํ ์ฌ๋ถ๋ฅผ ๋ช ํํ๊ฒ ์ ๋ฌ ๊ฐ๋ฅ
- ํ์ํธํ ์ด์๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฐ๋์
CHANGELOG
์ ๊ธฐ๋ก์ ๋จ๊ธธ ๊ฒ - ๋ด์ฉ๊ณผ ํ์์ Doctrine2 ํ๋ก์ ํธ ์ฐธ๊ณ
์ ๊ท๋ก ์์ฑ๋๋ ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ๋ PHP The Right Way์์ ๊ถ์ฅํ๋ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅธ๋ค.
twig
ํ ํ๋ฆฟ์resources
ํ์์ ์์นํ๋ค.- ์๋น์ ์ํ ์ ์ ํ์ผ์
public
ํ์์ ์์นํ๋ค. - Other Directories์
cron
,docker
๋ฑ์ด ํฌํจ๋ ์ ์๋ค.
- PSR/PSR2 ์ค์ : Preferences > Editor > Code Style > PHP > Set fromโฆ > PSR1/PSR2 ์ ํ
- Preferences > Editor
- Code Style
- Line separator (for new files): Unix and OS X (\n)
- Right Margin (columns) : 120
- Code Style > PHP > Wrapping and Braces > 'if()' statement
- โ Place ')' on new line ย - Code Style > PHP > Code Conversion
- โ Force short declaration style
- File and Code Templates > Includes > File Header
- PHP File Header ์ ๋ด์ฉ์ ๋น์ธ ๊ฒ
- General > Other
- โ Ensure line feed at file end on Save
- Code Style
- Inspections (PHP)
- Code Style
- โ Class path doesn't match project structure
- Probable bugs
- โ Assignment in condition
- โ Division by zero
- Code Style
- PhpStrom ์ค์ ๋ฒ
- Preferences > Languages & Frameworks > PHP > Code Sniffer Configuration ์ค๋ฅธํธ [...] ๋ฒํผ์ ๋๋ฅด๊ณ PHP Code Sniffer path์ phpcs๊ฒฝ๋ก ์ค์ (๊ฒฝ๋ก ํ์ธ์ brew info homebrew/php/php-code-sniffer)
- Preferences > Editor > Inspections PHP - PHP Code Sniffer Validation ์ ์ฒดํฌ ์ค๋ฅธํธ Coding standard ๋ฉ๋ด์์ Custom ์ ํ ํ [...] ๋ฒํผ์ ๋๋ฅด๊ณ ruleset.xml ์ ํ (ruleset ์์น : Ridibooks-Web/docs/lint/php)
- ์ฐธ๊ณ : https://confluence.jetbrains.com/display/PhpStorm/PHP+Code+Sniffer+in+PhpStorm