μ½λ© κ·μΉ¶
μΌλ°¶
PHP, HTML, XML, CSS, JS λ± λͺ¨λ ν μ€νΈ νμΌμ λ¬Έμμ μ BOMμ΄ μλ UTF-8μ λλ€.
μ€λ°κΏ λ¬Έμλ μ λμ€ λ°©μ(LF
)μ λ°λ¦
λλ€.
μλμ° λ©λͺ¨μ₯μμ νΈμ§ν νμΌμ μμ λ κ°μ§ κ·μΉμ μ΄κΈλ©λλ€.
μλμ° μ¬μ©μλ Notepad++ λ±μ κ°λ°μμ© μλν°λ₯Ό μ¬μ©νμ¬ νΈμ§νμκΈ° λ°λλλ€.
λ€μ¬μ°κΈ°λ 1κ°μ νμΌλ‘ ν©λλ€.
λ¨, ν λμ μ€νμ΄μ€λ₯Ό μ¬μ©νλ νμΌμμλ μΌκ΄μ± μ μ§λ₯Ό μν΄ 2~4μΉΈμ μ€νμ΄μ€λ₯Ό μ¬μ©ν μ μμ΅λλ€.
λνμ μΌλ‘ Markdown, YAML λ±μ νμΌμμλ μ€νμ΄μ€λ‘ λ€μ¬μ°κΈ°ν©λλ€.
μ£Όμμ΄λ κΈ΄ λͺ©λ‘ λ±μμ μ€μ λ§μΆκΈ° μν΄ νλ κ°μ μ€νμ΄μ€λ₯Ό μΆκ°νλ κ²½μ°λ₯Ό μ μΈνλ©΄,
λ€μ¬μ°κΈ° λͺ©μ μΌλ‘ νκ³Ό μ€νμ΄μ€λ₯Ό μμ΄μ μ¬μ©νμ§ μμ΅λλ€.
μ€λ°κΏ, λ€μ¬μ°κΈ° λ±μ κ·μΉμ .editorconfig
μ μ μλμ΄ μμ΅λλ€.
μ¬μ©νμλ μλν°μ EditorConfig νλ¬κ·ΈμΈμ μ€μΉνλ©΄ μ΄ νμΌμ μλμΌλ‘ μΈμνμ¬
λΌμ΄λ―Ήμ€μ λ§λ κ·μΉμ΄ μλμΌλ‘ μ μ©λλ μ κ·Ή νμ©νμκΈ° λ°λλλ€.
PHP μ½λλ§μΌλ‘ μ΄λ£¨μ΄μ§ νμΌμ 맨 λμ ?>
νκ·Έλ₯Ό μ¬μ©νμ§ μμ΅λλ€.
곡백 λ° μ€λ°κΏ κ·μΉ¶
ν΄λμ€ λ° ν¨μ μ μΈκ³Ό if
, for
, foreach
, while
λ±μ μ€κ΄νΈλ λ€μ μ€μ μλλ€.
class Foo
{ // RIGHT
public function bar() { // WRONG
}
}
쑰건문μ΄λ μνλ¬Έ λ΄μ νλμ λͺ
λ Ήλ§ μλ κ²½μ°μλ λ°λμ μ€κ΄νΈλ₯Ό μ¬μ©ν©λλ€.
κ·ΈλμΌ λμ€μ λͺ
λ Ήμ΄ μΆκ°λ κ²½μ° μμ νκΈ° νΈλ¦¬ν©λλ€.
if (!$foo) return false; // WRONG
if (!$bar) // RIGHT
{
return true;
}
λ¨, ν΄λ‘μ Έλ κ°μ μ€μ μ€κ΄νΈλ₯Ό μΈ μ μμΌλ©°,
μ΄ κ²½μ° μ€κ΄νΈ μλ€μ ν μΉΈμ© κ³΅λ°±μ λμ΄ ν΄λ‘μ Έκ° μμλκ³ λλλ μ§μ μ μ°ΎκΈ° μ½λλ‘ ν©λλ€.
λ«λ μ€κ΄νΈμ κ·Έ λ€μ κΈ°νΈ μ¬μ΄μλ 곡백μ λμ§ μμ΅λλ€.
$foo = function($bar) { return $bar + 1; }; // RIGHT
$foo = function($bar) { // RIGHT
return $bar + 1;
};
$foo = function($bar){return $bar + 1;}; // WRONG
μλ°μ€ν¬λ¦½νΈμμλ κ±°μ λͺ¨λ ν¨μκ° ν΄λ‘μ Έμ΄λ©°, μλͺ» μ€λ°κΏν κ²½μ° μΈλ―Έμ½λ‘ μ΄ μ½μ
λλ λ± λΆνΈμ΄ λ°μν μ μμΌλ―λ‘
μ€κ΄νΈλ₯Ό λ€μ μ€μ μ°μ§ μμλ λ©λλ€.
$("#foo").on("click", function() { // OK
if ($(this).val() === "bar") { // OK
$(this).val("baz");
}
});
ν¨μ νΈμΆμ ν¨μλͺ
κ³Ό κ΄νΈ μ¬μ΄, κ΄νΈμ μΈμ μ¬μ΄μ 곡백μ λμ§ μμ΅λλ€.
μΈμλ₯Ό ꡬλΆνλ μΌνλ λ€μͺ½μλ§ ν μΉΈμ 곡백μ λ‘λλ€.
function foobar($baz, $param) // RIGHT
function foobar ( $baz , $param ) // WRONG
λ°°μ΄ λ΄μ μμλ€μ ꡬλΆνλ μΌνλ λ€μͺ½μλ§ ν μΉΈμ 곡백μ λ‘λλ€.
array(1, 2, 3) // RIGHT
array(1,2,3) // WRONG
array(1 ,2 ,3) // WRONG
if
, for
, foreach
, while
λ±μ ν€μλ λ€μλ ν μΉΈμ 곡백μ λλ κ²μ΄ μμΉμ΄λ,
XE μμ μ μμ±λ μ½λλ κ³΅λ°±μ΄ μλ κ²μ΄ λ§μΌλ―λ‘ μ΄λ° μ½λ μ£Όλ³μμλ 곡백 μμ΄ μΈ μλ μμ΅λλ€.
==
, !=
, >
λ±μ μ°μ°μλ νμ μλ€μ ν μΉΈμ© κ³΅λ°±μ λ‘λλ€.
if ($foo === $bar) // RECOMMENDED
if($foo === $bar) // OK for XE Compatibility
if($foo==$bar){ // WRONG
μ¬λ¬ μ€μ κ±Έμ³ λ°°μ΄μ μ μΈν κ²½μ°, λ§μ§λ§ ꡬμ±μμ λ€μ μΌνλ₯Ό λ¨κΉλλ€.
κ·ΈλμΌ λμ€μ ꡬμ±μμλ₯Ό μΆκ°ν λ νΈλ¦¬ν©λλ€.
$animals = array(
'bear',
'cat',
'dog', // COMMA
);
λ¨, μλ°μ€ν¬λ¦½νΈ λ° JSONμμλ λ§μ§λ§ μΌνλ₯Ό λ°λμ μμ ν΄μΌ ν©λλ€.
μΌνλ₯Ό λ¨κ²¨λ κ²½μ° μΌλΆ λΈλΌμ°μ μμ μ€λ₯κ° λ°μν μ μκΈ° λλ¬Έμ
λλ€.
var animals = [
'bear',
'cat',
'dog' // NO COMMA
];
μ£Όμ¶
μ£Όμμ κ΄λ ¨ μ½λ μμ€μ μ¨μΌ ν©λλ€.
쑰건문μ΄λ 루νμ κ²½μ°μλ ν΄λΉ ν€μλμ μμ€μ μ£Όμμ μλλ€.
// If foo is bar, do something.
if ($foo->isBar())
{
// Note: this will do X, Y, and Z.
$foo->doSomething();
}
// Otherwise, do something else.
else
{
// TODO: Refactor this later.
$foo->doSomethingElse();
}
μ΄μ λΈλ‘μ λ§μ§λ§ λΆλΆμ μ£Όμμ μ§μ΄λ£μ΄μλ μ λ©λλ€.
// RIGHT
if ($condition)
{
}
// RIGHT
elseif ($foo)
{
// WRONG
}
else
{
}
λͺ¨λ ν΄λμ€μ ν¨μμλ /**
μΌλ‘ μμνλ PHPDoc λ°©μμ μ£Όμμ λΆμ¬μΌ ν©λλ€.
PHPDoc μ£Όμ μμ±μ μ΄λ €μμ΄ μλ κ²½μ°, λ€λ₯Έ ν΄λμ€μ ν¨μμ μ£Όμμ μ°Έκ³ νμμμ€.
/**
* This is the Foo class.
*/
class Foo
{
/**
* Constructor.
*
* @param string $member_srl
*/
public function __construct(int $member_srl)
{
// μλ΅
}
/**
* Check if this Foo is bar.
*
* @return bool
*/
public function isBar(): bool
{
return true;
}
}
λΆκ°νΌν κ²½μ°λ₯Ό μ μΈνλ©΄ μ£Όμμ μλ¬ΈμΌλ‘ μ°λ κ²μ μμΉμΌλ‘ νλ©°,
λλ¬Έμλ‘ μμνλ μμ ν λ¬Έμ₯μΌλ‘ μ΄λ£¨μ΄μ ΈμΌ ν©λλ€.
ν¨μμ κ°μμ± λ° νμ μ μΈ¶
μ κ· μΆκ°νλ ν΄λμ€ λ©μλλΌλ©΄ κ°μμ±, κ° νλΌλ―Έν°μ νμ
, κ·Έλ¦¬κ³ λ°ν νμ
μ μ μΈν΄μΌ ν©λλ€.
public
μ΄ μλ λ©μλλ μμ±μ μ΄λ¦μ μμΉμ μΌλ‘ μΈλλ°(_
)λ‘ μμν©λλ€.
λ¨, νμ νΈνμ±μ μν΄ κ°μμ±μ΄λ λ°ν νμ
λ±μ μ격νκ² μ νν μ μλ κ²½μ°μλ μμΈλ‘ ν©λλ€.
public function getFoobarList(string $foobar, int $count): array
{
return [];
}
νΉμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ°κ±°λ λ°ννλ λ©μλμ κ²½μ°, λ°λμ νμ μ μ μΈν΄μΌ ν©λλ€.
public function getFoobar(int $foobar_srl): FoobarItem
{
return new FoobarItem($foobar_srl);
}
protected function _arrangeFoobar(FoobarItem $foobar): \BaseObject
{
return new \BaseObject(0, 'success_inserted');
}
μ°Έκ³ λ‘ μΏΌλ¦¬ κ²°κ³Όλ Rhymix\Framework\Helpers\DBResultHelper
ν΄λμ€μ μΈμ€ν΄μ€λ‘ λ°νλ©λλ€.
use Rhymix\Framework\Helpers\DBResultHelper;
public function updateFoobar(object $args): DBResultHelper
{
return executeQuery('module.updateFoobar', $args);
}
μ»€λ° λ©μμ§¶
μ»€λ° λ©μμ§λ κ°λ₯νλ©΄ μλ¬ΈμΌλ‘ μμ±νλ©°, λμ¬μνμΌλ‘ μμνλ νμ¬ν, λͺ λ Ήν λ¬Έμ₯ μ¬μ©μ μμΉμΌλ‘ ν©λλ€.
Delete unnecessary condition // RIGHT
Fix #1234 // RIGHT
Deletes unnecessary condition // WRONG (λΆνμν 3μΈμΉ λ¨μ λμ¬λ³ν)
Fixed #1234 // WRONG (λΆνμν κ³Όκ±°ν)
μ΄ κ·μΉμ λ§μΆμ΄ μλ¬ΈμΌλ‘ μ»€λ° λ©μμ§λ₯Ό μμ±νκΈ° μ΄λ €μ΄ κ²½μ°, νκΈλ‘ μμ±ν΄λ 무방ν©λλ€.
νκΈ μ»€λ° λ©μμ§λ μ΄λμ 무μμ μ΄λ»κ² νλμ§ κ°κ²°νκ³ λͺ
ννκ³ κ²©μμκ² νννλ©°,
κ°λ₯νλ©΄ νμ¬ν λμ¬λ‘ λ§μΉλλ‘ ν©λλ€.
ν¬λ‘¬ μ΅μ λ²μ μμ μ€ν¬λ¦½νΈ μ€λ₯ ν΄κ²° // RIGHT
Foo ν΄λμ€μ bar() λ©μλ μΆκ° // RIGHT
νμΌμ²¨λΆ μλ¬λλκ±° κ³ μ³€μ©μΌ~^^ // WRONG (격μμλ νν)
ν¨μ κ°μ // WRONG (λ리λμ€ν νν)
κΈ°ν¶
λΌμ΄λ―Ήμ€μ κΈ°λ³Έ error_reporting
μ€μ νμμ μ΄λ€ μλ¬λ λ°μνμ§ μλλ‘ νλ κ²μ λͺ©νλ‘ ν©λλ€.
E_NOTICE
, E_DEPRECATED
λ± κ³Όκ±°μλ μ¬μνκ² μ¬κ²Όλ μ€λ₯λΌλ λ§μ°¬κ°μ§μ
λλ€.
νμ¬ λ²μ μμ μ¬μν μ€λ₯μλ λ¬Έμ κ° λ€μ λ²μ μμλ μΉλͺ
μ μΈ μ€λ₯λ‘ λ°λ μ μμ΅λλ€.
λΌμ΄λ―Ήμ€κ° μ§μνλ λͺ¨λ PHP λ²μ μμ μ μ μλνλ μ½λλ₯Ό μμ±ν΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄ arrow functionμ PHP 7.4 μ΄μμμλ§ μ§μλλ―λ‘ μ¬μ©ν μ μμ΅λλ€.
λΆλμ΄νκ² νΉμ λ²μ μμλ§ μ¬μ©ν μ μλ κΈ°λ₯μ μΆκ°ν κ²½μ°,
μ§μνμ§ μλ λ²μ μμλ λ¨μ§ κ·Έ κΈ°λ₯μ μ¬μ©ν μ μμ λΏ κ·Έ λ°μ μ€λ₯κ° λ°μν΄μλ μ λ©λλ€.
λ¬Έμμ΄κ³Ό λ¬Έμμ΄, μ μμ μ μλ₯Ό λΉκ΅ν λλ κ°λ₯νλ©΄ ==
λμ ===
μ μ¬μ©ν©λλ€.
μ€μ μλ£νμ΄ λ€λ₯Ό κ°λ₯μ±μ΄ μλ κ²½μ° intval()
, strval()
λ±μ ν¨μ λλ (int)
μ κ°μ type castλ₯Ό νμ©ν©λλ€.
μ μλ νμ 64λΉνΈ λ²μλ₯Ό κ°μ§λ κ²μΌλ‘ κ°μ ν©λλ€.
μ μ μμλ₯Ό μ°Έμ‘°ν λλ \RX_CLIENT_IP
μ κ°μ΄ \
λ₯Ό μμ λΆμ¬μ,
μΆν λ€λ₯Έ λ€μμ€νμ΄μ€λ‘ μ½λλ₯Ό μ΄λ λλ 볡μ¬νλλΌλ λ¬Έμ κ° μκΈ°μ§ μλλ‘ ν©λλ€.
μ¬κΈ°μμ κ·μ νμ§ μμ λ΄μ©μ PSR-1κ³Ό
PSR-12λ₯Ό λ°λ¦
λλ€.
CSS, JS λ± νλ‘ νΈμλμμ μ€ννλ μ½λλ μμΆμ΄λ μνΈν(λλ
ν) λ± μμ μ΄ μ΄λ €μ΄ μνκ° μλ μλ³Έ μμ€ κ·Έλλ‘ μ 곡λμ΄μΌ ν©λλ€.
μ¬μ©μκ° μμ€λ₯Ό μμ νλλΌλ λ³λμ νλ‘κ·Έλ¨μ΄λ κ°λ° νκ²½μ μ΄μ©ν μμΆ, μ»΄νμΌ, λΉλ λ±μ κ³Όμ μ κ±°μΉμ§ μκ³ μλ‘κ³ μΉ¨ ν κ³§λ°λ‘ μ¬μ©ν μ μμ΄μΌ νλ€λ λ»μ
λλ€.
λ¨, μλ³Έ μμ€κ° 곡κ°λμ΄ μλ μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό λμ΄λ€ μ¬μ©νλ κ²½μ°μλ μμΆλ μνλ‘ μ 곡ν μ μμ΅λλ€.
composer λΌμ΄λΈλ¬λ¦¬λ₯Ό μ
λ°μ΄νΈν λλ λΌμ΄λ―Ήμ€μμ 곡μμ μΌλ‘ μ§μνλ νκ²½(PHP 7.2 μ΄μ)μμ μ μ μλνλ λ²μ μΌλ‘ κ³ μ μμΌμΌ ν©λλ€.
λΌμ΄λ―Ήμ€ μ§μ νκ²½κ³Ό λ§μ§ μλ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ Έμ€λ κ²μ μμΉμ μΌλ‘ κΈμ§λλ©°, λΆκ°νΌν κ²½μ° ν΄λΉ λΌμ΄λΈλ¬λ¦¬λ₯Ό νΈμΆνλ λͺ¨λ λΆλΆμμ 미리 λ²μ μ 체ν¬νμ¬
μΈν΄λ£¨λλλ μμ μ μ€λ₯κ° λ°μνλ κ²μ λ§μμΌ ν©λλ€.
λν λΆνμν λΌμ΄λΈλ¬λ¦¬κ° λ€μ΄μ€μ§ μλλ‘ λ°λμ μλμ λͺ
λ ΉμΌλ‘ μ
λ°μ΄νΈν©λλ€.
composer update --no-dev --ignore-platform-reqs --optimize-autoloader