'Programming/CodeIgniter'에 해당하는 글 26건


1. 주석 달기

일반적으로 코드는 많은 주석을 포함하는 것이 좋습니다.
클래스와 메소드 선언 전의 DocBlock 스타일의 주석은 통합개발환경(IDE)등에서 인식될 수 있습니다.

/**
 * Super Class
 *
 * @package Package Name
 * @subpackage Subpackage
 * @category Category
 * @author Author Name
 * @link http://example.com
 */

class Super_class {

/**
 * Encodes string for use in XML
 *
 * @access public
 * @param string
 * @return string
 */

function xml_encode($str)

코드에 한 줄 주석을 사용할 수 있고, 큰 주석 블럭과 코드 사이에는 빈 줄을 넣습니다.

// break up the string by newlines
$parts = explode("\n", $str);

// A longer comment that needs to give greater detail on what is
// occurring and why can use multiple single-line comments.  Try to
// keep the width reasonable, around 70 characters is the easiest to
// read.  Don't hesitate to link to permanent external resources
// that may provide greater detail:
//
// http://example.com/information_about_something/in_particular/


$parts = $this->foo($parts);


2. TRUE, FALSE, NULL

이 키워드는 항상 대문자가 되어야 합니다.

INCORRECT:
if ($foo == true)
$bar = false;
function foo($bar = null)

CORRECT:
if ($foo == TRUE)
$bar = FALSE;
function foo($bar = NULL)


3. 논리 연산자

|| 연산자는 숫자 11과 비슷해 보이므로 사용하지 않는 것이 좋습니다.
&& 연산자는 AND 보다 많이 쓰이지만 둘다 가능합니다.
! 연산자의 경우 앞뒤로 공백이 와야 합니다.

INCORRECT:
if ($foo || $bar)
if ($foo AND $bar)  // okay but not recommended for common syntax highlighting applications
if (!$foo)
if (! is_array($foo))

CORRECT:
if ($foo OR $bar)
if ($foo && $bar) // recommended
if ( ! $foo)
if ( ! is_array($foo))


4. 리턴값 비교와 형 변환

어떤 PHP 함수는 실패했을 때 FALSE를 반환하지만, "" 나 0 값을 반환할 수도 있을 것입니다.
조건문에서 반환된 값을 사용할 때 가능하면 변수 유형을 비교하여 명시합니다. (===, !== 이용)

INCORRECT:
// If 'foo' is at the beginning of the string, strpos will return a 0,
// resulting in this conditional evaluating as TRUE
if (strpos($str, 'foo') == FALSE)

CORRECT:
if (strpos($str, 'foo') === FALSE)

INCORRECT:
function build_string($str = "")
{
    if ($str == "") // uh-oh!  What if FALSE or the integer 0 is passed as an argument?
    {

    }
}

CORRECT:
function build_string($str = "")
{
    if ($str === "")
    {

    }
}

typecasting 도 매우 유용할 수 있습니다.

$str = (string) $str; // cast $str as a string


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

다음은 CodeIgniter를 개발할 때 준수한 코딩 규칙의 사용을 설명합니다.


1. File Format

텍스트에디터 사용시 아래 사항에 유의 합니다.
- 파일들은 유니코드(UTF-8, no BOM) 인코딩 저장. (UTF-16, UTF-32 와 달리 UTF-8에는 BOM을 사용하지 않습니다.)
- 라인 끝은 LF(\n)를 사용해야 합니다.


2. PHP 닫는 태그

PHP 문서에서 닫는 태그(?>)를 사용했을 때 닫는 태그 뒤에 공백 있다면, 빈 페이지나 원치 않는 화면을 출력할 것입니다.
주석으로 파일의 끝을 표시하여, 파일의 경로를 표시하면 파일의 끝 임을 알 수 있으므로 파일의 마지막에 주석을 권장합니다.
(PHP 여는 태그(<?)의 앞에도 공백이 있어서는 안됩니다.)

INCORRECT:
<?php

echo "Here's my code!";

?>

CORRECT:
<?php

echo "Here's my code!";

/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */


3. 클래스명과 메소드명

클래스는 항상 대문자로 시작합니다.
여러 단어일 경우 동사가 포함된 것이 좋으며 카멜케이스(CamelCased) 가 아닌 언더바(_)로 구분해야 합니다.
너무 길지 않게 목적을 잘 설명할 수 있는 이름으로 지어야 합니다.
다른 클래스 메소드는 모두 소문자로 되어야 합니다.

INCORRECT:
class superclass
class SuperClass

CORRECT:
class Super_class


INCORRECT:
function fileproperties()
function fileProperties()
function getfileproperties()
function getFileProperties()
function get_the_file_properties_from_the_file()

CORRECT:
function get_file_properties()


4. 변수명

클래스 메소드와 거의 흡사하게 이름 짓습니다. (소문자, 언더바 구별 등)
너무 짧거나 단어가 아닌 변수는 for문 등의 루프 등에만 사용해야 합니다.

INCORRECT:
$j = &apos;foo&apos;;
$Str
$bufferedText
$groupid
$name_of_last_city_used

CORRECT:
for ($j = 0; $j < 10; $j++)
$str
$buffer
$group_id
$last_city


5. 상수

상수는 모두 대문자로 하는 것을 제외하고는 변수명 짓는 것과 같습니다.
CodeIgniter는 적절할 때 SLASH, LD, RD, PATH_CACHE 상수를 항상 사용합니다.

INCORRECT:
myConstant
N
S_C_VER
$str = str_replace('{foo}', 'bar', $str); // should use LD and RD constants

CORRECT:
MY_CONSTANT
NEWLINE
SUPER_CLASS_VERSION
$str = str_replace(LD.'foo'.RD, 'bar', $str);

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

1. ENVIRONMENT 상수

환경을 설정은 로깅 및 오류보고 등에 영향을 미칩니다.
기본적으로 CodeIgniter는 index.php 파일 상단에 development에 대한 환경 상수 설정이 제공됩니다.

define('ENVIRONMENT', 'development');
// 1. development
// 2. testing
// 3. production


2. Security

CodeIgniter는 악의적인 데이터가 어플리케이션에 전달될 수 가능성을 최소화하기 위하여,
허용하는 URI 문자열이 매우 제한적이며, URI는 다음만을 포함할 수 있습니다.

  • Alpha-numeric text
  • Tilde: ~
  • Period: .
  • Colon: :
  • Underscore: _
  • Dash: -

Register_globals
시스템이 초기화 되는 동안 $_GET, $_POST, $_COOKIE 배열을 제외한 모든 글로벌 변수들은 해제(unset)됩니다.
해제되는 것은 register_globals = off 와 동일합니다.

error_reporting
production 환경에서는 내부 error_reporting 값을 0으로 지정하여 PHP의 에러 리포팅을 비활성화 하는 것이 보안상 바람직합니다.

magic_quotes_runtime
이 지시어는 시스템이 초기화 되는 동안 off 되므로, 데이터베이스에서 데이터를 검색할 때 슬래시를 제거하지 말아야 합니다.


3. Best Practices

POST 데이터, COOKIE 데이터, URI 데이터, XML-RPC 데이터, SERVER 배열 데이터 등으로부터 어플리케이션으로 데이터를 받기 전에 3단계의 과정을 거치기를 권장합니다.
  1. 변질된 데이터를 필터합니다. (Security class)
  2. 올바른 타입, 길이, 크기 등에 따라 데이터를 검증하며 1단계를 대신할 때도 있습니니다.(Form Validation class)
  3. 데이터베이스에 데이터가 전달되기 전에 이스케이프 합니다. (Queries class)


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

CodeIgniter의 템플릿 엔진을 활용하지 않는다면, View 파일에 순수 PHP를 사용하게 될 것입니다.
View 파일에서 PHP 코드를 최소화하려면 코드 블럭에 PHP 대체 문법, 단축 태그 등을 사용하길 권장합니다.
이 문법에 친숙하지 않다면, 코드에서 중괄호와 echo 구문을 제거하도록 합니다.


제어 구조 대체

if, for, foreach, while 같은 제어 구조는 더 간단한 형식으로 쓰여질 수 있습니다.
<ul>
    <?php foreach ($todo as $item): ?>
    <li><?=$item?></li>
    <?php endforeach; ?>
</ul>

중괄호가 없으며 마지막 중괄호는 endforeach 로 대체됩니다.
제어 구조의 간단한 마지막 문법입니다: endif, endfor, endforeach, endwhile.
각 구문의 뒤에는 콜론을 사용하며 마지막에는 세미콜론을 사용합니다.

if/elseif/else 를 사용하는 다른 예제입니다.
<?php if ($username == 'sally'): ?>
   <h3>Hi Sally</h3>
<?php elseif ($username == 'joe'): ?>
   <h3>Hi Joe</h3>
<?php else: ?>
   <h3>Hi unknown user</h3>
<?php endif; ?>

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

기본적으로 application 디렉토리에 빌드될 단일 어플리케이션을 관리하기 위해 CodeIgniter 를 사용사용합니다.
하지만 한번의 CodeIgniter 설치로 다중 어플리케이션을 관리하거나, application 디렉토리 이름 변경도 가능합니다.

application 경로/이름 변경은 index.php 파일에서 할 수 있습니다.

$application_folder = "/Path/to/your/application";


다중 어플리케이션

여러 다른 어플리케이션을 관리하려면, 각 어플리케이션을 application 디렉토리 안에 서브 디렉토리로 위치하면 됩니다.
예를 들어 "foo" 와 "bar" 를 생성한다면, 다음의 디렉토리와 구조를 가질 것입니다.

applications/foo/
applications/foo/config/
applications/foo/controllers/
applications/foo/errors/
applications/foo/libraries/
applications/foo/models/
applications/foo/views/

applications/bar/
applications/bar/config/
applications/bar/controllers/
applications/bar/errors/
applications/bar/libraries/
applications/bar/models/
applications/bar/views/

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,