devil cat everdevel character

프로그래머가 아니던 시절 만들기 시작한 에버디벨 !
첫 오픈 한달과 최근 한달의 방문자수를 비교해보니 무려 190배 이상 증가했습니다.
그 사이 어느새 1년 9개월의 경력을 갖고 있는 프로그래머가 되었습니다.
실무의 경험을 담아 더 많은 내용으로 올해 2월 에버디벨이 책으로 나옵니다.
{HTML5, CSS3, jQuery, MySQL5, PHP7(PDO, OOP, MVC)}
아무것도 몰라도 컴퓨터만 있다면 하나부터 학습하며 발전해 나가는 자신을 보는 감동을 드리겠습니다.

에버디벨이 밥값을 할 수 있도록 광고를 넣었습니다. 양해 바랍니다.

disney Teyon kin

함수 1

다른 프로그래밍 언어에서도 그렇듯이 PHP에도 함수가 있습니다.
함수는 왜 사용할까요? 음.. 프로그래밍을 더 편하게 하기 위해서 사용합니다. 중복된 기능을 함수로 만들면 다음에 중복된 기능을 사용할 때 또 코딩할 필요 없이 그 함수를 사용하면 됩니다.
이러한 함수는 자신이 직접 제작도 가능하고 또한 기본 내장함수라는 것이 있습니다. 그 기본 내장함수는 이미 만들어져 있는 함수를 의미합니다.

그럼 예를 들어서 간단하게 어떠한 숫자 2개를 더해야 하는 업무를 부여 받았다고 합시다.
그 어떠한 수를 더하기 위해서 우리는 어떠한 수를 계속 더해야 하는 소스를 만들어내야 합니다.
하지만 대신 더하기를 해주는 함수를 한번 만든다면 그 이후는 함수에게 부탁하면 됩니다. 2개의 숫자를 함수에 넣고 그 함수는 더한값을 토해내면 그 값을 사용하면 됩니다.
간단히 설명하기 위해서 더하기를 하지만 실전으로 가면 여러가지 복잡한 상황이 많겠죠? 그럼 직접 함수를 만들어 볼까요?
함수를 만드는 방법은 간단합니다 함수를 영어로 function이라고 하는데요.

 function 함수이름(처리해야할 값){
   //함수가 처리해야할 명령 작성
 }

그럼 간단하게 hello world를 출력하는 함수를 만들어 보겠습니다.

 <?php
 function helloWorld(){
   echo 'hello world';
 }
 ?>

함수를 만들었습니다. 그럼 만들었으면 사용을 해야겠죠?

함수 호출

함수 호출은 매우 간단합니다. 함수명(); <-- 이렇게요 즉, 함수명을 작성하고 괄호를 열고 닫고 끝
그럼 hello world를 함수를 호출해볼까요?

 <?php
 function helloWorld(){
   echo 'hello world';
 }
 helloworld(); //함수 호출
 ?>

hello world함수를 보면 ()안에 아무것도 없죠? ()안에 넣는 값을 한국어로 인자값 영어로 파라미터 라고 부릅니다.
파라미터가 필요한 함수이면 파라미터를 넣고, 필요하지 않는 함수라면 안넣어도 됩니다. 파라미터를 넣은 함수를 만들어 볼까요?

 <?php
 function hello($name){
   echo $name.'님 안녕하세요.';
 }
 hello('유저'); //함수 호출
 ?>

파라미터로 문자열 유저를 넣었습니다. 결과는 '유저님 안녕하세요.'가 출력되었죠? 이렇게 파라미터를 스트링(문자열)로 넣을수도 있고 변수로 넣을수도 있죠.
그럼 이번엔 파라미터를 변수로 넣어 볼까요?

 <?php
 function hello($name){
   echo $name.'님 안녕하세요.';
 }
 $parameter1 = '태영';
 hello($parameter1); //함수 호출
 ?>

결과는 '태영님 안녕하세요.'로 나옵니다. 함수 호출 하는 부분의 파라미터는 $parameter1로 적어서 보내면 parameter1의 내용인 태영만 날아가며 함수 선언부의 $name의 값이 '태영' 으로 변합니다.

그러하니 $parameter1으로 보냈는데 $name로 받네 왜 이러지 이러한 고민은 하지 않으시면 됩니다. 또한 파라미터를 받는 함수인데 파라미터값 없이 받을 경우 파라미터에 기본값을 지정할 수 있습니다.

 <?php
 function hello($name = '유저'){
   echo $name.'님 안녕하세요.';
 }

 hello(); //함수 호출
 ?>

위와 같이 함수를 선언한 파라미터값에 기본값을 설정해주면 파라미터 없이 함수를 할 시 기본값이 출력됩니다.

return

return은 함수가 무언가의 결과를 반환합니다 함수안에서 return문을 만나면 함수는 기능을 끝냅니다.

지금 까지 공부한 함수는 return문이 없었습니다. 함수 안에서 echo문이 있어서 출력을 해주었습니다.
그럼 이번엔 return을 사용해서 함수를 만들어 봅시다. 2가지의 수를 더해주는 함수 입니다.

 <php
 function plus($num1, $num2){
   $plus = $num1 + $num2;
   return $plus;
 }

 echo plus(42,20);
 ?>

위의 소스를 보면 함수 호출에 42와 20을 보냅니다. 그럼 함수 받는 부분에선 첫번째 파라미터를 $num1에 저장 두번째 파라미터를 num2에 저장 하고 $plus라는 변수를 선언 후에 2개의 값을 더하며 $plus를 반환합니다.
그러면 합한값을 반환하고 echo에 의해 합한 값이 출력됩니다. 이런식으로 자신이 마이너스를 하는 함수 등등 여러가지 함수들을 만들 수 있습니다. ^^

하나의 함수를 더 만들어 볼까요?

2개의 수를 넣고 2개의 수 사이의 수를 출력하는 함수를 만들어 봅시다.

 <php
 function numList($num1, $num2){
   for($i = $num1; $i <= $num2; $i++){
    echo $i.'
'; } } numList(42,80); ?>

그 외에도 아래의 여러 내장함수 들이 있습니다.
문자열 관련 함수

crypt() 단방향 암호화
strtoupper() 문자열의 알파벳을 모두 대문자로 변환
strtolower() 문자열의 알파벳을 모두 소문자로 변환
strlen() 문자열의 길이 반환
ord() 문자에 해당하는 아스키 코드값을 반환
chr() 아스키 코드값에 해당하는 문자를 반환
nl2br() "New Line To HTML. <br />" 태그로 엔터를 입력한 부분의 줄 바꿈
echo(), print() 문자열 출력
printf(), sprintf() 형식이 있는 문자열 출력
substr() 문자열에서 자르기를 시작할 위치를 왼쪽에서부터 배열 수로 설정
strchr() 문자열을 자르기 시작할 문자열의 문자로 위치를 표시
chop() 문자열의 뒷부분에 있는 공백을 제거
trim() 문자열의 앞과 뒤에 있는 공백을 제거 (앞 ltrim(), 뒤 rtrim() 로 제거)
explode() 문자열을 배열로 반환
str_replace() 임의의 문자열에서 특정 문자를 다른 문자로 변경
preg_match() 임의의 문자열에서 찾을 문자열이 존재한다면 1, 아니면 0을 반환
ereg() 문자열 검색에서 알파벳 대/소문자를 정확히 구별하여 검색
eregi() 문자열 검색에서 알파벳 대/소문자의 구분 없이 검색
strcmp() 두 개의 문자열에서 첫 글자의 아스키 코드값에 따라 1, 0, 01을 반환
addslashes() 역슬래시 삽입
strslashes() 역슬래시 제거
문자열 암호화 함수 :crypt()
단방향 암호화 함수로 개인정보 유출을 막기 위한 도용방지에 효과적인 함수이다.
사용자가 등록한 비밀번호는 데이터 베이스에 암호화 되어 저장되기 때문에 비밀번호는 사용자에 의해 원래 비밀번호와
함께 있을 때만 유효하다

 <?php
 echo "단방향 암호화 crypt() 함수 <br />";

 $char = "arigatou";
 echo  "현재 암호화가 되어있지 않은 상태의 비밀번호 : {$char} <br /> ";

 $passwd = crypt($char); // 변수 선언후 $char을 암호화 처리
 echo  "암호화 처리된 비밀번호 {$passwd} <br />";
 ?>

위의 소스에서 $char 변수에 arigatou라는 비밀번호를 저장하였고
$passwd = crypt($char)로 해서 암호화처리를 하였다.
위의 페이지를 출력해서 새로고침을 하면 암호화된 비밀번호는 값이 계속 바뀌게 된다.

암호화된 암호가 바뀌지 않고 나오게 할려면
crypt()안에 두개의 인자를 넣어줍니다. 첫번째는 암호화시킬 문자이며 2번째는 임의의 알파벳입니다. 2자까지 입력가능
예를 들어서 아래와같이 표현

 <?php
 $passwd = "abc123";
 $char = "as";

 echo "암호로 지정한 문자열 : abc123 <br /><br />";
 echo "암호화 : ";
 echo  crypt($a, $b);
 ?>

위와 같이 해주면 출력시에도 암호화된 비밀번호가 바뀌지 않습니다.
2번째 인자는 자신이 임의로 정하면 됩니다.
고객들의 암호화된 비밀번호가 전부 pw로 시작하게 하고 싶다면 pw를 입력하면 됩니다.


문자를 대,소문자로 변환

 <?php
 echo "대, 소문자 변환하기 <br />";

 $a = "Hello World!! <br />";

 echo "제시된 문자열 {$a}  <br />";

 $str1 = strtoupper($a);
 echo "1. 대문자로 변환 {$str1} <br />";

 $str2 = strtolower($a);
 echo "2. 소문자로변환 {$str2} <br />";
 ?>

$a로 Hello World!!! 를 입력해 준후 $str1 = strtoupper($a)로 대문자로 변환해준다. 결과에서 보듯이 이미 대문자인것은 그대로 대문자로 있다.
strtolower로 사용한것도 마찬가지


문자열 길이 반환 함수 : strlen() 아스키코드값 반환

 <?php
 echo "문자열의 길이와 아스키코드 값의 반환 함수 <br />";

 $a = "2012 런던 올림픽";

 echo "길이를 알아볼 문자는 ? : {$a} <br />";

 $str1 = strlen($a);

 echo "\$a의 문자열의 길이는 : {$str1} <br />";

 $b = 'B';

 echo "아스키코드로 반환할 알파벳은 ? : $b ";

 $str2 = ord($b);

 echo "b의 아스키코드값 : $str2 <br />";
 ?>

strlen()함수로 문자열의 길이를 출력할때 16이라고 나오는 이유는
"2012 런던 올림픽" 에서 영문,숫자,띄어쓰기는 1byte를 차지하고 한글은 한글자에 2byte를 차지하기때문입니다.
즉 2012는 4byte 런던 도 4byte 올림픽은 6byte 빈칸 2개는 2byte 그러므로 16이 출력됩니다.
아스키코드는 네이버에서 아스키코드값을 검색하시면 나옵니다.

nl2br() 함수

form태그안에서 엔터를 입력하면 줄을 바꾸어서 입력해도 실제로는 입력될때는 줄바꿈이 일어나지 않습니다.
하지만 이 함수를 사용하면 엔터를 치면 출력문에도 줄바꾸기가 이루어집니다.

 <form method="post" action="test1.php">

 <textarea rows="3" cols="30" name="a">
 </textarea>
 <input type="submit" value="send">
 </form>

위 파일을 test.php 파일로 저장을 하고 다른 새파일을 열어서 아래를 test1.php로 저장합니다.

 <?php
 $a = $_POST['a'];  //<form>태그에서 post방식으로 전송 받음.(반드시 선언해야 함)
 $a = nl2br($a);
 echo " ▼ 추천하는 글<hr>";
 echo "$a";
 ?>

test.php파일에서 1라인 method = "post"는 post방식으로 값을 전달해주는것입니다. 나중에 자세히 나옵니다. 지금은
그냥..
action="test1.php"는 값을 test1.php로 보내는 것입니다.
textarea 에서 name="a"인데 저 텍스트에리어에 입력된 값이 a이며 그 값은 포스트 방식으로 test1.php로 submit버튼을 누르면 제출됩니다.

그러면 test1.에서는 그 a값을 받고 출력 해줍니다.

test1.php에서는 $a = nl2br($a) 를 하지 않는다면 엔터를 쳐도 결과에서는 줄바꿈이 일어나지 않습니다.

다음강좌는 7강.함수 2 입니다. 클릭하면 다음 강좌로 이동합니다.