'phP 기초 다지기/세션/함수-클레스'에 해당되는 글 3건

세션 클레스입니다. 사용방법은 다음 소스를 참고해서 작성하면 되겠습니다.

 

<?php
/*
 * session.class.php
 */
/*

include('session.class.php');


setsession('세션이름', '유지시간', '저장경로');

// 세션 굽기
$session = new setsession('my_session');
$session->put_session('my_id', 'habony');
$session->put_session('my_pw', 'password');
$session->put_session('my_email', 'hahaha@daum.net');
$session->session();

// 세션 가져오기
echo $session->get_session('my_email');

// 세션 부분 삭제
$session->session_unregister('my_email');

// 세션 전체 삭제
$session = setsession('my_session');
$session->remove_session();
*/
class 
setsession
{
    var 
$session
;
    var 
$key
;
    var 
$name
;
    var 
$expire
;
    var 
$path
;
    
    function 
setsession($name$expire=0$path='/'
)
    {
        
$this->name stripslashes($name
);
        
$this->expire addslashes($expire
);
        
$this->path addslashes($path
);
        
$this->key md5($this->name
);
        
$this->session unserialize($_SESSION[$this->key
]);
    }

    function 
put_session($key$val
)
    {
        
$this->session[$key] = rawurlencode(stripslashes($val
));
    }

    function 
session
()
    {
        
$this->session_register
();
        return 
true
;
    }

    function 
get_session($key
)
    {
        return 
rawurldecode($this->session[$key
]);
    }

    function 
session_register
()
    {
        if(
function_exists("session_register")
            && (
PHP_VERSION '5.3.0'
))
        {
            
session_register($this->key
);
        }
        
$_SESSION[$this->key] = serialize($this->session
);
    }

    function 
session_unregister($key
)
    {
        unset(
$_SESSION[$key
]);
    }

    function 
remove_session
()
    {
        
session_write_close
();
        
$_SESSION 
= array();
        if(isset(
$_COOKIE[session_name
()]))
        {
            
setcookie(session_name(), ''$this->expire-42000$this->path
);
        }
        @
session_destroy
();
    }
}
?>

 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

쿠키 생성 클레스입니다. 보통 쿠키는 30개 라는 제한 내에서 만들 수 있지만 다음 클레스를 이용한다면 한개의 쿠키가 5000자를 넘지 않는다면 무한정 만들어 사용할 수 있는 클레스입니다.

 

<?php
/*
 * cookie.class.php
 */

/*

include('cookie.class.php');


setcookie('쿠키이름', '유지시간', '저장경로');

// 쿠키 굽기
$cookie = new setcookie('my_cookie');
$cookie->put_cookie('my_id', 'habony');
$cookie->put_cookie('my_pw', 'password');
$cookie->put_cookie('my_email', 'hahaha@daum.net');
$cookie->cookie();

// 쿠키 가져오기
echo $cookie->get_cookie('my_email');

// 쿠키 부분 삭제
$cookie->put_cookie('my_email');
$cookie->cookie();

// 쿠키 전체 삭제
$cookie = setcookie('my_cookie');
$cookie->remove_cookie();
*/
class 
setcookie
{
    var 
$cookie
;
    var 
$key
;
    var 
$name
;
    var 
$expire
;
    var 
$path
;

    function 
setcookie($name,$expire=0,$path='/'
)
    {
        
$this->name stripslashes($name
);
        
$this->expire addslashes($expire
);
        
$this->path addslashes($path
);
        
$this->key md5($this->name
);
        
$this->cookie unserialize($_COOKIE[$this->key
]);
    }

    function 
put_cookie($key$value=''
)
    {
        
$this->cookie[$key] = rawurlencode(stripslashes($value
));
    }

    function 
cookie
()
    {
        if(
strlen(serialize($this->cookie)) > 5000
)
        {
            return 
false
;
        }
        else
        {
            
setcookie($this->keyserialize($this->cookie), $this->time(), $this->path
());
            return 
true
;
        }
    }

    function 
get_cookie($key
)
    {
        return 
rawurldecode($this->cookie[$key
]);
    }

    function 
time
()
    {
        return 
$this->expire
;
    }

    function 
path
()
    {
        return 
$this->path
;
    }

    function 
remove_cookie
()
    {
        
$this->cookie false
;
        
$this->expire $this->time()-42000
;
        
$this->cookie
();
    }
}
?>

 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

함수는 모든 유효한 php코드, 즉 조건문, 클레스내, 전역변수, 외부변수, 중첩, 상수등 외부의 모든 작업을 함수내에서 사용할 수 있도록 만들어진 코드 블록의 하나로 모듈화가 가능합니다.

함수는 내장함수, 외장함수, 익명함수로 분류할 수 있는데, 내장함수는 php설치시 기본적으로 제공되는 수 많은 함수를 지원하며, 사용자가 만들어 새로운 함수를 선언할 수도 있습니다.

 내장함수  PHP에서 기본적으로 제공하는 함수
 외장함수  사용자가 만들어 사용하는 함수
 익명함수  이름을 지정하지 않은 함수

사용자 함수는 function이라는 예약어로 정의하며, 하나 이상의 인자(arguments)가 올 수 있습니다.

함수 선언(prototype)을 읽는 법

우선 함수 선언(prototype)을 읽는 법을 알아야 합니다. 다음은 내장 함수입니다.

 bool in_array ( mixed $needle, array $haystack [, bool $strict])

 bool  in_array 

( mixed $needle, array $haystack [, bool $strict])

┗ 반환값 ┗ 함수이름  ┗ ( 인자형, $인자이름 )

"bool"은 불형으로 true거나 false로 반환한다는 뜻입니다. "mixed"는 스칼라 값(문자열, 정수, 실수)이나 배열(Array)이 될 수 있습니다. 세번째 선택적인 인자 이름을 strict 이라 하며, 모든 선택적인 인자는 [ 브라켓 ]사이에 들어갑니다. 매뉴얼에 strict 인자의 기본값은 bool FALSE로 나와 있습니다.

다음 예제도 내장함수입니다.

 int  strlen ( string $string )
┗ 반환값 ┗ 함수이름 ┗ ( 인자형, $인자이름 )

위 함수 선언을 일반적인 방법으로 다시 작성할 수 있습니다.

 부분 설명
 strlen
함수이름입니다.
 int
이 함수가 반환하는 값은 integer형입니다. (즉, 문자열의 길이가 숫자로 측정됩니다) 
 (string $string)
이 함수의 처음 (이 경우는 하나뿐인) 인수는 string 이라는 이름을 가지는 string형입니다.

필요적 조건으로 타입에 대한 기본적 이해는 중요합니다. 타입은 다음 표와 같습니다.

 스칼라형:
  booleans 부울형, bool로 정의
 
integer 정수형, int로 정의
 
float (소수, double)  실수형, double로 정의
  string  문자열형
 복합형:
  array  배열형
  object  객체형
 특별형:
  resource  원천 자원
  null 비어 있는 값
 모의형
  mixed  문자열, 정수, 실수, 배열
  number  정수, 실수
  callback  함수나 클레스의 호출
  void 인자 비워둠
 
사용자 선언 함수

함수 이름은 변수 이름의 규칙에 따라 자유롭게 문자나 _로 시작하여 문자, 숫자, 그리고 _를 여러개 가질 수 있지만 특수문자는 사용할 수 없습니다. 다음은 하나의 인자를 사용하여 정의하였습니다.

예제 (ex #1
  <?php
 
function test($arg 'value'
) {
    
$retval 125
;
    echo 
" $arg 예제 함수.\n"
;
    return 
$retval
;
 }

 
test(); 
// 결과: value 예제 함수

 
echo test(); 
// 결과: 125 value 예제 함수

 
test("좋은"); 
// 결과: 좋은 예제 함수

 
$a "참"
;
 
$good test($a
);
 echo 
$good
// 결과: 125 참 예제 함수
 
?> 

하나 이상의 인자를 사용할 경우 쉼표로(,)로 구분해서 사용하면 되는데, 다음과 같이 작성해 줍니다.

예제 (ex #2
 <?php
 
function test($arg1,$arg2,$arg3='bool'
) {
    echo 
" 예제 함수.\n"
;
 }

 
$a 1
;
 
$b 2
;
 
test($a,$b,$c
);
 
?>

여기서 $a, $b, $c는 인자라 하고, $arg1, $arg2, $arg3은 파라미터(parameter)라 합니다. $arg3='bool'은 인자에 전달된 변수가 없으면, "bool"을 디폴트로 사용하겠다는 것입니다. 만약, 디폴트 값이 있으면 인자를 비워도 괜찮지만, 없으면 인자를 비워 두어서는 안됩니다.

예제 (ex #3
 <?php
 
function test($a,$b,$c
) {
      echo 
"테스트"
;
 }

 
test($a,$b); 
// 결과: $c에 디폴트 값이 없으므로 작동하지 않고, PHP 오류 표시가 나옵니다.
 
?>

인자나 파라미터에 배열이 올 수도 있고, 반환값이 배열이 될 수도 있습니다.

예제 (ex #4
 <?php
 
function makecoffee($type "cappuccino"
) {
    return 
"Making a cup of $type.\n"
;
 }
 echo 
makecoffee
();
 echo 
makecoffee(null
);
 echo 
makecoffee("espresso"
);

 
/*
 결과:
 Making a cup of cappuccino.
 Making a cup of .
 Making a cup of espresso.
 */

 
function mcoffee($types = array("카푸치노"), $coffeeMaker NULL
) {
    
$device is_null($coffeeMaker) ? "손" $coffeeMaker
;
    return 
"$device(으)로 ".join(", "$types)."를 만듭니다.\n"
;
 }
 echo 
mcoffee
();
 echo 
mcoffee(array("카푸치노""라바짜"), "찻주전자"
);

 
/*
 결과:
 손(으)로 카푸치노를 만듭니다.
 찻주전자(으)로 카푸치노, 라바짜를 만듭니다. 
 */

 
function returncoffee
() {
    
$arr = array("카푸치노""라바짜"
);
    return 
$arr
;
 }
 
$arr returncoffee
();
 
print_r($arr
);

 
/*
 결과:
  Array
 (
    [0] => 카푸치노
    [1] => 라바짜
 )
 */
 
?>
 
Return 반환문

반환문은 for문이나, while문과 같은 루프형이나 함수, 클레스내에 호출된다면, 함수나 루프의 수행을 즉시 끝내고, return에 결과값을 넘겨줄 수 있습니다. 이는 break문과 흡사합니다.

예제 (ex #5
 <?php
 
function returncoffee
() {
    
$coffee 
" 는 맛이 좋습니다."
    
return "카푸치노" $coffee
;
 }
 echo 
returncoffee(); 
// 결과: 카푸치노 는 맛이 좋습니다.

 // 이 함수는 반환값을 갖지 않습니다.
 
function voidcoffee
() {
    
$coffee 
" 는 맛이 좋습니다."
    
return;
 }
 echo 
voidcoffee(); 
// 결과:
 
?>

반환문은 함수가 아니라 언어구조이기 때문에 괄호로 묶을 필요는 없습니다. 이는 일반적인 것으로 PHP가 더 적은 일을 하게 합니다만 괄호를 사용해도 큰 문제는 없습니다.

예제 (ex #6
 <?php
 
function small_numbers
() {
    return array (
012
);
 }
 list (
$zero$one$two) = small_numbers
();
 echo 
"$zero, $one, $two"
// 결과: 0, 1, 2

 
function myfunc1
() {
    return(
'thingy' or die('otherthingy'
));
 }
 function 
myfunc2
() {
    return 
'thingy' or die('otherthingy'
);
 }
 function 
myfunc3
() {
    return(
'thingy') or die('otherthingy'
);
 }
 function 
myfunc4
() {
    return 
'thingy' or 'otherthingy'
;
 }
 function 
myfunc5
() {
    
$x 'thingy' or 'otherthingy'; return $x
;
 }
 echo 
myfunc1(). "\n"myfunc2(). "\n"myfunc3(). "\n"myfunc4()
"\n"myfunc5(). "\n"
;
 
// 결과: 1 1 1 1 thingy
 
?> 

다음은 반환값을 갖지 않지만, global로 대신할 수도 있습니다.

예제 (ex #7

 <?php
 
function writefunctionvars
() {
    global 
$foo
;
    
$foo "something"
;
 }
 
writefunctionvars
();
 echo 
$foo
// 결과: something

 
function writefunctionvars2
() {
    global 
$foo2
;
    
$foo2[] = "something"
;
    
$foo2[] = "body"
;
 }
 
writefunctionvars2
();
 
print_r($foo2); 
// 결과: Array ( [0] => something [1] => body ) 
 
?>

 
재귀 호출
 
재귀호출은 함수 자기 자신을 호출하는 것을 말합니다.

예제 (ex #8

 <?php
 
function recursion($a
){
    if (
$a 20
) {
        echo 
"$a\n"
;
        
recursion($a 1
);
    }
 }

 
$a 1
;
 
recursion($a); 
// 결과: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

 
function recursion2($a
) {
    if (
$a 10
) {
        echo 
"before: ".$a."\n"
;
        
recursion2($a 1
);
        echo 
"after: ".$a."\n"
;
    }
 }
 
recursion2(0
);
 
/*
 결과:
 before: 0 before: 1 before: 2 before: 3 before: 4 before: 5 before: 6 
before: 7
 before: 8 before: 9 after: 9 after: 8 after: 7 after: 6 after: 5 
after: 4 after:  3 after: 2
 */
 
?>

 
익명 함수
 
익명함수는 이름을 지정하지 않은 함수를 생성하게 도와 줍니다. 이 기능은 (PHP 5.3)부터 사용가능합니다.

예제 (ex #9

 <?php
 $result 
0
;

 
$one 
= function(){
      
var_dump($result
);
 };
 
$two = function() use ($result
){
      
var_dump($result
);
 };
 
$three = function() use (&$result
){
      
var_dump($result
);
 };

 
$result
++;

 
$one();    
// 결과: 
 
$two();    
//  결과: 0
 
$three();    
//  결과: 1
 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요