웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
PHP에 입문하시는 분들을 위해 적어봅니다.
2008.04.26 15:01
음. PHP에 입문하시는 분들을 위해 도움이 될 만한 부분을 적어봅니다.
저도 프로그래밍을 하지만 (잘못합니다 -_-;;) 이런 부분을 먼저 해야할 것 같아서요....;;
프로그래밍을 하시기 위해서는 먼저, 습관이 들어야 될게 있는게 있습니다.
첫번째가 변수명, 함수명에 대한 습관이구요
두번째가 5분 생각하고 1분 코딩하는 습관이구요
세번째가 항상 문법에 맞도록 코딩하는 습관이 중요합니다.
[변수/함수]
변수/함수명은 아주 중요합니다. 네이밍이 잘되어있어야지 프로그램 로직이 잘 파악됩니다.
크게 2가지로 나뉘는데요 정확한 용어는 생략합니다. ^^
2가지는 _(언더바형) 과 isAdmin 과 같은 낙타형으로 나뉩니다. 네이밍은 만약 이 변수가 회원의 정보면
언더바형 : $member_info
낙타형 : $memberInfo
이렇게 됩니다. 이것이 왜 중요한지 먼저 생각하자면 PHP 도 5부터 class에 public, private 와 같은 scope 개념이 적용이 됩니다.
다르게 말하자면
php4버전의 코딩)
class zeroClass
{
var $czero = null;
function zeroClass()
{
$this -> czero = 'abc';
}
function toString()
{
return $this -> czero;
}
}
$zero = new zeroClass();
$testVar = $zero -> toString();
echo $testVar;
이 부분이 php5에서는
class zeroClass
{
private static $czero = null;
public function __construct()
{
self::$czero = 'abc';
}
public function __toString()
{
return self::$czero;
}
}
$zero = new zeroClass();
echo $zero;
이런식으로 바뀌는 겁니다. 물론 private static은 상속땜시 (extends 를 말함) 보호를 하는 것이구요 일반적이면 public $zero 로 쓰시면 됩니다. 외부에서 접근가능한지 아닌지로 생각하시면 쉽습니다.
이것이 변수네이밍과 무슨 상관이 있냐!!! 라고 말하실 분도 계실 겁니다.
허나, 자신만의 규약을 만드시면 소스를 해석하실때 엄청 편합니다.
예를 들자면, 저같은 경우는 이렇게 합니다.
함수 : public은 낙타형으로 private는 앞에 _낙타형
변수 : public과 중요인자는 낙타형, 임시적인 의미를 가지는 것은 _낙타형이거나 언더바형
예를 들자면.
class zeroClass extends yamiClass
{
private static $conn;
private static $answer = null;
private static $husband_status = null;
private static $wife_status = null;
public function __construct()
{
parent::__construct();
}
public function __destruct() { parent::__destruct(); }
public function callHusband()
{
if (is_null(self::$husband_status))
self::$husband_status = self::_changeValue('busy');
return;
}
private function _changeValue($input)
{
return ($input != '') ? $input:null;
}
}
대충 저런식으로요.
저런 자신만의 습관을 가지도록 노력하시면 더더욱 프로그램이 잘될 것 같습니다.^^;
또한 문법에 맞게 하는 것도 중요합니다.
php를 하시는 분들중에 잘못된 문법을 쓰시는 분들이 많습니다.
바로 그부분은 query를 변수에 넣을때 사용하시는 것인데요...
$query = "select count(*) from TBL where no='$no'";
mysql은 문법을 그다지 중요하게 안따져도 되지만, 정석적인 방법으로는
$query = "select count(*) from TBL where no=$no";
가 되야합니다. no컬럼은 integer형이므로 '' 가 있으면 안됩니다.
또한 PHP는 string parsing을 할때 "" 가 있으면 ""안의 $값을 다 변환하므로 가급적 다음과 같이 적어주시는 것이 낫습니다.
$query = 'select count(*) from TBL where no='.$no;
[여기서의 TIP]
많은 분들이 echo 를 쓰십니다.
허나 PHP는 echo 만 있는게 아닙니다. 각기 미묘한 차이가 있지만.
문자열 출력에는 print와 printf, sprintf 가 있습니다.
예)
$test = '12345';
echo ("내가 본 test는 $test이다"); => 흔히 쓰는 echo, 정석은 echo ("내가 본 test는 ${test}이다"); <-- echo 안에서는 {}로 변수 보호를 해줘야 합니다.
print는 echo와 비슷하지만 여러줄을 쓸경우 다릅니다. print는 그냥 pass
중요한 부분은 여기서 나올 printf, 와 sprintf입니다.
printf("내가 본 test는 %s이다",$test); -> 상위의 echo 결과와 똑같습니다.
$return = sprintf("내가 본 test는 %s이다",$test); -> 결과를 return변수안에 집어넣었습니다.
이 두줄을 보면 생각나는게 있지 않나요?
바로!! 쿼리문 작성할때나 문장안에 여러개 변수쓸때 응용할 부분입니다.
$query = sprintf("SELECT COUNT(*) FROM TBL WHERE no=%d",$no);
%s -> string, %d -> decimal 을 의미합니다. (decimal이 맞던가?) 암튼, C문법과 비슷하게 쓰실수 있습니다.
긴 쿼리문을 적을경우
$query = sprintf("SELECT %s FROM TBL WHERE no=%d AND fld='%s' AND fld2='%s'","*",$no,$fld1,$fld2);
유용합니다.
[함수의 팁]
함수 안에서 &를 사용하시면 더욱 편리합니다.
function testFunc($arg, &$arg1)
{
if ($arg != '')
$arg1 = $arg;
return;
}
testFunc("123",$ret);
echo $ret;
하시면 흔히 결과값 리턴받을 경우 $aa = function(11); 이런 방식보다 편리합니다.
너무 두서없이 적었나 봅니다...-_-;;
기회가 되면, 정리를 좀 하면서 적겠습니다.
저도 프로그래밍을 하지만 (잘못합니다 -_-;;) 이런 부분을 먼저 해야할 것 같아서요....;;
프로그래밍을 하시기 위해서는 먼저, 습관이 들어야 될게 있는게 있습니다.
첫번째가 변수명, 함수명에 대한 습관이구요
두번째가 5분 생각하고 1분 코딩하는 습관이구요
세번째가 항상 문법에 맞도록 코딩하는 습관이 중요합니다.
[변수/함수]
변수/함수명은 아주 중요합니다. 네이밍이 잘되어있어야지 프로그램 로직이 잘 파악됩니다.
크게 2가지로 나뉘는데요 정확한 용어는 생략합니다. ^^
2가지는 _(언더바형) 과 isAdmin 과 같은 낙타형으로 나뉩니다. 네이밍은 만약 이 변수가 회원의 정보면
언더바형 : $member_info
낙타형 : $memberInfo
이렇게 됩니다. 이것이 왜 중요한지 먼저 생각하자면 PHP 도 5부터 class에 public, private 와 같은 scope 개념이 적용이 됩니다.
다르게 말하자면
php4버전의 코딩)
class zeroClass
{
var $czero = null;
function zeroClass()
{
$this -> czero = 'abc';
}
function toString()
{
return $this -> czero;
}
}
$zero = new zeroClass();
$testVar = $zero -> toString();
echo $testVar;
이 부분이 php5에서는
class zeroClass
{
private static $czero = null;
public function __construct()
{
self::$czero = 'abc';
}
public function __toString()
{
return self::$czero;
}
}
$zero = new zeroClass();
echo $zero;
이런식으로 바뀌는 겁니다. 물론 private static은 상속땜시 (extends 를 말함) 보호를 하는 것이구요 일반적이면 public $zero 로 쓰시면 됩니다. 외부에서 접근가능한지 아닌지로 생각하시면 쉽습니다.
이것이 변수네이밍과 무슨 상관이 있냐!!! 라고 말하실 분도 계실 겁니다.
허나, 자신만의 규약을 만드시면 소스를 해석하실때 엄청 편합니다.
예를 들자면, 저같은 경우는 이렇게 합니다.
함수 : public은 낙타형으로 private는 앞에 _낙타형
변수 : public과 중요인자는 낙타형, 임시적인 의미를 가지는 것은 _낙타형이거나 언더바형
예를 들자면.
class zeroClass extends yamiClass
{
private static $conn;
private static $answer = null;
private static $husband_status = null;
private static $wife_status = null;
public function __construct()
{
parent::__construct();
}
public function __destruct() { parent::__destruct(); }
public function callHusband()
{
if (is_null(self::$husband_status))
self::$husband_status = self::_changeValue('busy');
return;
}
private function _changeValue($input)
{
return ($input != '') ? $input:null;
}
}
대충 저런식으로요.
저런 자신만의 습관을 가지도록 노력하시면 더더욱 프로그램이 잘될 것 같습니다.^^;
또한 문법에 맞게 하는 것도 중요합니다.
php를 하시는 분들중에 잘못된 문법을 쓰시는 분들이 많습니다.
바로 그부분은 query를 변수에 넣을때 사용하시는 것인데요...
$query = "select count(*) from TBL where no='$no'";
mysql은 문법을 그다지 중요하게 안따져도 되지만, 정석적인 방법으로는
$query = "select count(*) from TBL where no=$no";
가 되야합니다. no컬럼은 integer형이므로 '' 가 있으면 안됩니다.
또한 PHP는 string parsing을 할때 "" 가 있으면 ""안의 $값을 다 변환하므로 가급적 다음과 같이 적어주시는 것이 낫습니다.
$query = 'select count(*) from TBL where no='.$no;
[여기서의 TIP]
많은 분들이 echo 를 쓰십니다.
허나 PHP는 echo 만 있는게 아닙니다. 각기 미묘한 차이가 있지만.
문자열 출력에는 print와 printf, sprintf 가 있습니다.
예)
$test = '12345';
echo ("내가 본 test는 $test이다"); => 흔히 쓰는 echo, 정석은 echo ("내가 본 test는 ${test}이다"); <-- echo 안에서는 {}로 변수 보호를 해줘야 합니다.
print는 echo와 비슷하지만 여러줄을 쓸경우 다릅니다. print는 그냥 pass
중요한 부분은 여기서 나올 printf, 와 sprintf입니다.
printf("내가 본 test는 %s이다",$test); -> 상위의 echo 결과와 똑같습니다.
$return = sprintf("내가 본 test는 %s이다",$test); -> 결과를 return변수안에 집어넣었습니다.
이 두줄을 보면 생각나는게 있지 않나요?
바로!! 쿼리문 작성할때나 문장안에 여러개 변수쓸때 응용할 부분입니다.
$query = sprintf("SELECT COUNT(*) FROM TBL WHERE no=%d",$no);
%s -> string, %d -> decimal 을 의미합니다. (decimal이 맞던가?) 암튼, C문법과 비슷하게 쓰실수 있습니다.
긴 쿼리문을 적을경우
$query = sprintf("SELECT %s FROM TBL WHERE no=%d AND fld='%s' AND fld2='%s'","*",$no,$fld1,$fld2);
유용합니다.
[함수의 팁]
함수 안에서 &를 사용하시면 더욱 편리합니다.
function testFunc($arg, &$arg1)
{
if ($arg != '')
$arg1 = $arg;
return;
}
testFunc("123",$ret);
echo $ret;
하시면 흔히 결과값 리턴받을 경우 $aa = function(11); 이런 방식보다 편리합니다.
너무 두서없이 적었나 봅니다...-_-;;
기회가 되면, 정리를 좀 하면서 적겠습니다.
댓글 5
-
수아기
2008.04.29 11:21
우와 좋은 글인걸요. 기초가 중요하잖아요 무엇이든지 그시작은 네이밍에서.^^ -
야크
2008.04.30 20:28
질문 있습니다..
위에 설명소스에..
self::$czero = 'abc';
이런 부분이 있는데요.self뒤에 있는 :: 이 두점은 무슨 뜻인가요..
제로보드 소스를 봐도 이런기호가 나오던데요..
제가 갖고 있는 php책을 정말 자세히 다 찾아봣지만 전혀 언급이 없습니다..
저건 또 기호라서 인터넷 검색도 안되더군요...php메뉴얼에 찾아가서 검색해두 전혀 찾을수 없구요...
설명 좀 부탁드리겟습니다.... -
특급잠수부
2008.05.03 00:16
얼레 댓글달았는데 왜 안보일까요 음...
:: 는 scope입니다.위에 보시는 public private 도 다 scope라 할수 있구요..
PHP 레퍼런스 '클래스와 객체' 쪽을 보시면 됩니다.
국내 서적은 다 쇼핑몰이니 뭐니해서 내용채워넣기만 한 책들이라서... 보실만한게 없습니다.
정보문화사에서 나오는 빨간책(?)시리즈를 보시는게 도움됩니다.
http://kr.php.net/manual/en/language.oop5.paamayim-nekudotayim.php 를 참조하시기 바랍니다. -
모그422
2008.06.26 18:57
echo ("내가 본 test는 $test이다");
->
echo ("내가 본 test는 ".$test."이다");
가 정석 아닐까요..? -
구라맨
2009.06.16 11:44
"~~~~~~~"; 안엔 '~~' 겠죠잉~ ㅋㅋ