'phP 기초 다지기/연산자 기초'에 해당되는 글 10건

비트 연산자는 말그대로 0과 1로 이루어진 2진수를 가지고 연산을 합니다.



예제 

 설명

 결과 

 $a & $b

 AND

 두 비트가 모두 1인 값을 반환

 $a | $b

 OR

 두 비트 중 하나라도 1이면 1를 반환

 $a ^ $b

 XOR

 두 비트가 다를 때 1를 반환

 ~$a

 NOT

 비트 NOT 연산자, 비트 뒤집기

 $a << $b

 Shilft Left

 $a 를 왼쪽으로 $b 만큼 이동

 $a >> $b

 Shift Right

 $a 를 오른쪽으로 $b 만큼 이동


AND 연산자

주어진 비트 중 두 비트가 모두 1이라면 참입니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

  0    1  1  0  0  0  -> 10 진수로 표현하면 24 입니다.

---------------------

  0    0  1  0  0  0   -> 10 진수로 표현하면 8입니다.

---------------------


 여기서 두 비트가 일치하는 비트는 8이므로 8을 반환합니다. 

ex.1)

 <?php
   echo 10 & 24; // 결과: 8 
 ?>


OR 연산자

주어진 비트 중 하나라도 1이면 참으로 합니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

  0    1  1  0  0  0  -> 10 진수로 표현하면 24 입니다.

---------------------

  0    1  1  0  1  0   -> 10 진수로 표현하면 26입니다. ex.1) 16 + 8 + 2 = 26

---------------------


 여기서 두 비트 중 하나라도 일치하는 비트는 16, 8, 2 이므로 26 입니다. 


ex.1)

 <?php
   echo 10 | 24; // 결과: 26 
 ?>


XOR 연산자

주어진 비트 중 두 비트가 다른 값을 반환합니다.

 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

  0    1  1  0  0  0  -> 10 진수로 표현하면 24 입니다.

---------------------

  0    1  0  0  1  0   -> 10 진수로 표현하면 18입니다. ex.1)  16 + 2 = 18

---------------------


 여기서 두 비트가 일치하지 않는 비트는 16과 2이므로 18을 반환합니다. 


ex.1)

 <?php
 echo 10 ^ 24; // 결과: 18 
 ?>


NOT 연산자

비트 NOT 연산자는 1를 0으로 0을 1로 바꾸는 것으로 "비트 뒤집기" 또는 "비트 반전"이라고 부릅니다.

 32  16  8  4  2  1   0 -1 -2 -4 -8 -16   -> 10 진수 표현

----------------------------------------

  0    0  1  0  1  0   0  0  0  0   0    0   -> 10 진수로 표현하면 10 입니다.

----------------------------------------

  0    0  0  1  0  1  -1 -1 -1-1 -1    0   -> 10 진수로 표현하면 -11 입니다.


  ex.1)  10 - 20 - 1 = -11


ex.1)

 <?php
 echo ~10; // 결과: -11 

 echo ~100; // 결과: -101

 echo ~50; // 결과: -51

 echo ~25; // 결과: -26
 ?>


Shift Left 연산자

주어진 값 만큼 왼쪽으로 비트를 이동하는 연산자입니다. 각 단계는 2로 곱하기를 의미합니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

-<--<--<--<--<--- 

  0    1  0  1  0  0   -> 비트를 왼쪽으로 1만큼 이동시키면 20 이 됩니다.


 여기서 8과 2를 왼쪽으로 1칸 이동시키면 16과 4가 되므로 결과는 20 이 됩니다.

 ex.) 10*2 = 20이 되며 2칸 이동시키면 10*2*2 = 40 이 됩니다.


ex.1)

 <?php
 echo 10 << 1; // 결과: 20 
 ?>


Shift Right 연산자

주어진 값 만큼 오른쪽으로 비트를 이동하는 연산자입니다. 각 단계는 2로 나누기를 의미합니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

->-->-->-->-->--- 

  0    0  0  1  0  1   -> 비트를 오른쪽으로 1만큼 이동시키면 5가 됩니다.


 여기서 8과 2를 오른쪽으로 1칸 이동시키면 4와 1이 되므로 결과는 5 이 됩니다.

 ex.) 10/2 = 5가 되며 2칸 이동시키면 10/2 = 5/2 = 2 가 됩니다.


ex.1)

 <?php
 echo 10 >> 1; // 결과: 5
 ?>



블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

이 두 비교 연산자의 차이는 비슷하면 "참"으로 인식하고, 아니면 엄격하게 비교한다는 점입니다. == 는 대충이 되고, === 는 엄격하게 인데, 글자 하나라도 틀리다면 "거짓"으로 결정해 버리는 게 === 입니다.

우선 == 로 true 에 대한 비교 를 보겠습니다.

예제(ex #1

 <?php 
 $a 
1

 if(
$a == true
){ 
      echo 
"true "
// 결과: true 
 


 
$a true

 if(
$a == true
){ 
      echo 
"true "
// 결과: true 
 


 
// 음수도 참이라고 인식합니다. 
 
$a = -1

 if(
$a == true
){ 
      echo 
"true "
// 결과: true 
 


 
$a "1"

 if(
$a == true
){ 
      echo 
"true "
// 결과: true 
 


 
$a "-1"

 if(
$a == true
){ 
      echo 
"true "
// 결과: true 
 

 
?>


다음은 == 로 false 의 비교 입니다.

예제(ex #2

 <?php
 $a 
false

 if(
$a == false
){ 
      echo 
"true "
// 결과: true 
 


 
// 0 이거나 문자열 "0" 이면 false입니다. 
 
$a 0

 if(
$a == false
){ 
      echo 
"true "
// 결과: true 
 


 
$a 
= array();; 
 if(
$a == false
){ 
      echo 
"true "
// 결과: true 
 


 
$a ""

 if(
$a == false
){ 
      echo 
"true "
// 결과: true 
 


 
$a null

 if(
$a == false
){ 
      echo 
"true "
// 결과: true 
 

 
?>


다음은 == 로 문자열 "php"에 대한 비교인데, 결과는 흥미롭게 나옵니다.

예제(ex #3

 <?php 
 $a 
true

 if(
$a == "php"
){ 
      echo 
"true "
// 결과: true 
 


 
// 0 이면 true 이고, 문자열 "0" 이면 false 로 인식합니다. 
 // 0 == false 이면, 0 == "php"는 false가 아닙니다.
 
$a 0

 if(
$a == "php"
){ 
      echo 
"true "
// 결과: true 
 


 
$a "php"

 if(
$a == "php"
){ 
      echo 
"true "
// 결과: true 
 

 
?>


앞서 본 바와 같이 == 는 정확한 비교가 조금 어려울 수 있음을 알아 둘 필요가 있습니다. 이제 === 로 true 에 대한 비교를 해보겠습니다.

예제(ex #4

 <?php 
 
// true는 상수 1의 값을 가지지만
 // 정수 1은 아니므로 false 입니다.
 
$a 1

 if(
$a === true
){ 
      echo 
"true "
// 결과:
 


 
$a true

 if(
$a === true
){ 
      echo 
"true "
// 결과: true 
 


 
$a = -1

 if(
$a === true
){ 
      echo 
"true "
// 결과:
 


 
$a "1"

 if(
$a === true
){ 
      echo 
"true "
// 결과:
 


 
$a "-1"

 if(
$a === true
){ 
      echo 
"true "
// 결과:
 

 
?>


예제(ex #5

 <?php
 $a 
false

 if(
$a === false
){ 
      echo 
"true "
// 결과: true 
 


 
// 0 은 false 이지만 상수 false 가 아니므로 거짓입니다. 
 
$a 0

 if(
$a === false
){ 
      echo 
"true "
// 결과:
 


 
$a 
= array();; 
 if(
$a === false
){ 
      echo 
"true "
// 결과:
 


 
$a ""

 if(
$a == false
){ 
      echo 
"true "
// 결과:
 


 
// null 은 false 와 같지만 상수 false가 아니므로 거짓입니다.
 
$a null

 if(
$a === false
){ 
      echo 
"true "
// 결과:
 

 
?>


예제(ex #6

  <?php 
 $a 
true

 if(
$a === "php"
){ 
      echo 
"true "
// 결과:
 


 
$a 0

 if(
$a === "php"
){ 
      echo 
"true "
// 결과: 
 


 
$a "php"

 if(
$a === "php"
){ 
      echo 
"true "
// 결과: true 
 

 
?>


예제(ex #7

 <?php 
 $a 
""

 if(
$a === null
){ 
      echo 
"true "
// 결과: 
 


 
$a ""

 if(
$a === ""
){ 
      echo 
"true "
// 결과: true 
 


 
$a ""

 if(
$a === " "
){ 
      echo 
"true "
// 결과: 
 


 
$a ""

 if(
$a === false
){ 
      echo 
"true "
// 결과: 
 

 
?> 


예제(ex #8

 <?php 
 $a 
NULL

 if(
$a === null
){ 
      echo 
"true "
// 결과: true
 


 
$a ""

 if(
$a === ""
){ 
      echo 
"true "
// 결과: true 
 


 
$a " "

 if(
$a === " "
){ 
      echo 
"true "
// 결과: true
 


 
$a 
= array(); 
 if(
$a 
=== array()){ 
      echo 
"true "
// 결과: true
 


 
$a FALSE

 if(
$a === false
){ 
      echo 
"true "
// 결과: true
 

 
?> 


가능하다면 엄격한 === 로 비교하는게 좋지 않을까요?  왜냐하면, == 와 === 에 대한 이해 차이로 공격자는 이러한 빈틈에 여러분의 웹사이트를 공격할지도 모른다는 사실입니다. 개발자도 사람인지라 실수를 하니까요.

예제(ex #9

  <?php 
 
if("php" == 0
){ 
      echo 
"true "
// 결과: true 
 


 if(
== null
){ 
      echo 
"true "
// 결과: true 
 


 if(
null == "php"
){ 
      echo 
"true "
// 결과: 
 

 
?>


관련 링크: 2011/04/05 - [phP 들어가기/연산자 기초] - 비교 연산자
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

연산자 우선권을 알아야 작업시 개발자의 실수를 줄일 수 있을 것입니다. 다음 표를 보면 우선 순위가 */% 보다 ++나 --가 우선 순위를 가집니다.
 
순위 연산자 결합
1  ++ -- 무결합 
2  ! 오른쪽 
3  * / % 왼쪽 
4  + - . 왼쪽 
5  << >> 왼쪽 
6  < <= > >= <> 무결합 
7  == != === !== 무결합 
8  & 왼쪽 
9  ^ 왼쪽 
10  | 왼쪽 
11  && 왼쪽 
12  || 왼쪽 
13  ? : 왼쪽 
14  = += -= *= /= .= %= &= |= ^= <<= >>= 오른쪽 
15  and 왼쪽 
16  xor 왼쪽 
17  or 왼쪽 
18  , 왼쪽 

표에 제시된 대로라면, == 보다 < 나 <= 이 우선 순위를 가지기 때문에 다음 조건식은 참이 아닙니다.

예제 (ex #1
 <?php 
 
if(== 2
){ 
    echo 
"테스트"

 }
 
// 결과: 





 
if(== 1
){  
    echo 
"테스트"
;  
 } 
 
// 결과:
 
?>

산술 연산자를 예로 들자면, + - , 보다 * / % 이 우선 순위를 가지게 되므로 우리가 원하는 결과 값이 나오지 않습니다.

예제 (ex #2
 <?php 
 $a 
3

 echo 
$a
// 결과: 16


 
$b 1

 echo 
$b
// 결과: 16
 
?>

필요하다면, 우선권을 강제적으로 변경위해 괄호를 사용할 수 있습니다. 예를 들면: (1 + 5) * 3 은 18 이라는 결과를 얻게 될 것입니다. 연산자 우선권이 같으면, 왼쪽에서 오른쪽 비교, 결합을 사용합니다.

예제 (ex #3
 <?php 
 
// * / % 우선권이 같으면 *이 우선권을 가지며,
 // 뒤이어 / 이 우선권을 가지고, 마지막으로 % 이므로
 // (3 * 3) % 5 = 4 가 됩니다.
 
$a 5
;
 
// 결과: 4 




 // 5 % (3 * 3) = 6 이 됩니다.
 
$a 3
;
 
// 결과: 6




 // (true ? 0 : true) ? 1 : 2 = 2 
 
$a true true 2

 
// 결과: 2 




 // = 보다 + 이 우선권을 가집니다.
 // $a = ($b += 3)
 
$a 1

 
$b 2

 
$a $b += 3

 
// 결과: $a = 5, $b = 5 
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

변수명과 변수값은 다릅니다. 그래서 변수명은 서로 달라도 같은 내용(변수값)을 가질 수 있습니다. 이는 파일이름은 같을 수는 없지만 파일내용은 다르거나 같을 수 있음을 뜻합니다. 참조연산자는 이와 같습니다. 서로 다른 변수명에 변수내용을 그대로 복사할 수 있습니다.

예제 (ex #1

 <?php
 $a 
1
;
 
$b 2
;
 
$d 3
;
 
// $c 변수에 $b변수를 복사(참조)해 둡니다.
 // 그래서 $c 변수와 $b 변수는 각각 2를 가지게 되었습니다.
 
$c = &$b
;
 
// $c 변수와 $d 변수에 5를 대입합니다.
 
$c $d 5
;

 echo 
$c
// 결과: 5
 
echo "<br />"
;
 echo 
$b
// 결과: 5
 
echo "<br />"
;

 echo 
$d
// 결과: 5
 
echo "<br />"
;

 
// $c 참조 변수에 8을 대입합니다.
 
$c 8
;

 echo 
$c
// 결과: 8
 
echo "<br />"
;
 
// $c의 참조가 $b이므로 동일 값을 가지게 됩니다.
 
echo $b
// 결과: 8
 
echo "<br />"
;

 
// $d 변수는 단순히 5를 대입한 것이므로 참조가 아닙니다.
 
echo $d
// 결과: 5
 
?>


예제 (ex #2
 <?php
 $a 
1
;
 
$b $a
;
 
$c = &$a
;

 echo 
$b
// 결과: 1
 
echo $c
// 결과: 1

 // 참조 변수에 5를 대입해 보겠습니다.
 
$a 5
;

 echo 
$b
// 결과: 1
 
echo $c
// 결과: 5
 
?>

참조란 $a와 $c는 완전히 동일한 작용을 하게 합니다. 이는 대입 연산자나 가변 변수와는 다릅니다. 전역변수의 참조를 보면 흥미로운 반응을 보입니다.

예제 (ex #3
 <?php
 
// http://127.0.0.1/test.php?var=test&php=habony&monster=write 로 GET을 넘겼을 때의 예입니다.

 
print_r($_GET
);
 
/*
 결과:
 Array
 (
    [var] => test
    [php] => habony
    [monster] => write
 )
 */

 // $_GET 변수를 $var 변수에 참조하면 같은 결과물을 얻을 수 있습니다.

 
$var = &$_GET
;
 
print_r($var
);
 
/*
 결과:
 Array
 (
    [var] => test
    [php] => habony
    [monster] => write
 )
 */
 
?>

함수내에서도 참조할 수 있습니다.

예제 (ex #4

 <?php
 
function foo(&$var
){
    
$var
++;
 }

 
$a 5
;
 
foo($a); 
// 결과: 6


 
function bar
(){
      
$a = &$GLOBALS['var'
];
      
$a "test"
;
      return 
$a
;
 }

 
$var 5
;

 echo 
bar(); 
// 결과: test
 
echo "<br />"
;

 echo 
$var
// 결과: test
 ?>


함수내의 참조는 함수내에서만 동작합니다. 다음 예를 보겠습니다.

예제 (ex #5

 <?php
 
function bar
(){
      
$a = &$var
;
      
$a "test"
;
      return 
$a
;
 }

 
$var 5
;

 echo 
bar(); 
// 결과: test
 
echo "<br />"
;

 echo 
$var
// 결과: 5
 ?> 


다음은 참조의 해제입니다.

예제 (ex #6

 <?php
 $a 
1
;
 
$b = &$a
;
 unset(
$a); 
// $a 변수의 삭제

 
echo $b
// 결과: 1

 // unset으로 $a와 $b사이의 연결만을 끊습니다.
 // $a에 대입한 것이므로 결과물은 참조하지 않습니다.
 
$a 5
;

 echo 
$b
// 결과: 1
 
?> 


이중 참조로 다른 결과물을 얻을 수 있습니다.

예제 (ex #7

 <?php
 $a 
1
;
 
$b =& $a
;
 
$c =& $a
;
 unset(
$a); 
// $a 변수의 삭제

 
echo $b
// 결과: 1

 // 5를 대입하여 새로운 결과값을 얻습니다.
 
$b 5
;

 echo 
$b
// 결과: 5
 
echo $c
// 결과: 5
 ?> 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

오류 제어 연산자 @를 php코드 앞에 붙이면 생성되는 모든 오류 메시지를 무시하게 됩니다. 이는 다른 방문자에게 오류 코드를 감추게 하여 보안 유효성을 높여 줍니다. 이 연산자로 변수, 함수, include()호출, 상수 등에 붙일 수 있지만, if나 foreach와 같은 조건부 제어문에는 사용할 수 없습니다.

다음 예는 분명 코드가 잘못되어 있지만 @로 인해 오류를 표시하지 않습니다.

예제 (ex #1
 <?php
 
@mkdir('폴더경로'
);
 @
file('test file'
);

 
// 변수에 @를 붙이지 않아도 오류 코드는 표시하지 않습니다.
 
$str = @$var[$key
];

 
// test.php는 실제 존재하지 않는 파일입니다. 
 
@include('test.php'
);

 
$var = @new some_class
();
 
?>

@를 어떠한 함수에서 오류를 제거하려고 사용하였을 때, 그 함수가 존재하지 않거나, 오타를 내면 그 위치에서 아무런 이유를 알려주지 않고 스크립트가 종료되는 점에 주의가 필요합니다.

예제 (ex #2

 <?php
 
(@include('test.php')) or die(" 실제 존재하지 않는 파일입니다."
);
 
// 결과: 실제 존재하지 않는 파일입니다.

 
$my_file = @file ('non_existent_file') or die ("파일을 오픈할 수 없습니다."
);
 
// 결과: 파일을 오픈할 수 없습니다.

 
@mkdir() or die('폴더 경로를 지정하지 않았습니다.'
);
 
// 결과: 폴더 경로를 지정하지 않았습니다.

 // 변수에 @를 사용한 예입니다.
 
if( @$var === $something 
){ }
 if( @
$_SERVER'HTTP_REFERER' ] !== '/www/some/path/file' 
) { }
 if( @
$_POST'checkbox' ] === 'yes' 
) { }
 
?>


$php_errormsg 오류 메시지 변수

@로 인해 만들어진 모든 오류 메시지는 $php_errormsg 변수에 저장됩니다. 이 변수는 각 오류마다 덮여 씌워지므로, 배열로 만들거나, 즉시 보여줘야 합니다.

예제 (ex #3

 <?php
 $my_file 
= @file ('non_existent_file'
) or
    die (
"Failed opening file: error was '$php_errormsg'"
);
 
/*
 결과:
 Failed opening file: error was 'file(non_existent_file) [function.file]: failed to open stream: No such 
file or directory'
 */

 
(@include("no file")) or die("Could not find file.php!"); 
// 결과: Could not find file.php!
 
?>


$php_errormsg 변수를 사용하기 위해서 php.ini의 track_errors를 On했을 때만 동작합니다.

 


다음은 모든 에러 메시지를 배열로 저장한 예입니다.

예제 (ex #4
 <?php
 
// 에러를 배열로 담기 위해 초기화합니다.
 
$errormsg 
= array();


 
$value = @$take
;
 
$errormsg[] = "파일명: ".__FILE__.", 소스: ".__LINE__."라인, 에러코드: ".$php_errormsg."\n"
;

 function 
test
(){
       
mkdir
();
 }

 @
test
();
 
$errormsg[] = "파일명: ".__FILE__.", 소스: ".__LINE__."라인, 에러코드: ".$php_errormsg."\n"
;

 @
strpos
();
 
$errormsg[] = "파일명: ".__FILE__.", 소스: ".__LINE__."라인, 에러코드: ".$php_errormsg."\n"
;

 @
file ('non_existent_file'
);
 
$errormsg[] = "파일명: ".__FILE__.", 소스: ".__LINE__."라인, 에러코드: ".$php_errormsg."\n"
;

 @
mkdir('폴더경로'
);
 
$errormsg[] = "파일명: ".__FILE__.", 소스: ".__LINE__."라인, 에러코드: ".$php_errormsg."\n"
;

 
$my_file = @file ('non_existent_file'
);
 
$errormsg[] = "파일명: ".__FILE__.", 소스: ".__LINE__."라인, 에러코드: ".$php_errormsg."\n"
;


 
print_r($errormsg
);



  
/*
 결과:
 Array
 (
    [0] => 파일명: C:\Server\public_html\test.php, 소스: 7라인, 
에러코드: Undefined variable: take
    [1] => 파일명: C:\Server\public_html\test.php, 소스: 14라인, 에러코드: Undefined variable: take
    [2] => 파일명: C:\Server\public_html\test.php, 소스: 17라인, 에러코드: Wrong par ameter count for strpos()
    [3] => 파일명: C:\Server\public_html\test.php, 소스: 20라인, 에러코드: file (non_existent_file) [<a href='function.file'>function.file
</a>]: failed to open stream: No such file or directory
    [4] => 파일명: C:\Server\public_html\test.php, 소스: 23라인, 에러
코드: mkdir() [<a href='function.mkdir'> function.mkdir</a>]: File 
exists
    [5] => 파일명: C:\Server\public_html\test.php, 소스: 26라인, 에러코드: 
file (non_existent_file) [<a href='function.file'>function.file</a>]: 
failed to open
 stream: No such file or directory
 }
 */
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

자료형 변환은 데이터를 다른 자료형으로 변환해주는 연산자로서 다음 표의 자료형으로 변환이 가능합니다.

 자료형   의 미
 (string) 문자열형
 (int) 정수형
 (double) 실수형
 (bool) 부울형
 (array) 배열형
 (object) 객체형
 (unset) 변수제거

정수형으로 변환하기

예제 (ex #1
 <?php
 $a 
= (int)12.2345
;
 echo 
$a
// 결과: 12

 
$b  = (int)"12.2345"
;
 echo 
$b
// 결과: 12

 
$c = (int)"12.2345 정수로 바꿉니다."
;
 echo 
$c
// 결과: 12

 // 정수형 앞에 문자가 오면 0으로 대입됩니다.
 
$d = (int)
"실수형인 12.2345를 정수로 바꿉니다."
 
echo $d
// 결과: 0

 
$e = (int)"0.122345 정수로 바꿉니다."
;
 echo 
$e
// 결과: 0

 
$f $b $c
;
 echo 
$f
// 결과: 24
 
?>

실수형으로 변환하기

예제 (ex #2
 <?php
 $a 
= (double)12.2345
;
 echo 
$a
// 결과: 12.2345

 
$b  = (double)"12.2345"
;
 echo 
$b
// 결과: 12.2345

 
$c = (double)"12.2345 실수형으로 바꿉니다."
;
 echo 
$c
// 결과: 12.2345

 // 실수형 앞에 문자가 오면 0으로 대입됩니다.
 
$d = (double)
"문자열을 12.2345인 실수형으로 바꿉니다."
 
echo $d
// 결과: 0

 
$e $b $c
;
 echo 
$e
// 결과: 24.469
 
?>

배열형으로 변환하기

예제 (ex #3
 <?php
 $a 
= (array)12.2345
;
 echo 
$a
// 결과: Array
 
echo $a[0]; 
// 결과: 12.2345

 
$b = (array)"12.2345 을 배열로 바꿉니다."
;
 echo 
$b
// 결과: Array
 
echo $b[0]; 
// 결과: 12.2345 을 배열로 바꿉니다.

 // 문자열을 배열로 바꾸어도 +연산자를 사용하면 정수형, 실수형으로 합계가 됩니다.
 
$c $a[0] + $b[0
];
 echo 
$c
// 결과: 24.469

 // 문자열을 배열로 바꾸어 .연산자를 사용하면 문자열형으로 변환됩니다.
 
$d $a[0] . $b[0
];
 echo 
$d
// 결과: 12.234512.2345 을 배열로 바꿉니다.

 
$e $a $b
;
 echo 
$e
// 결과: ArrayArray
 
?>

부울형으로 변환하기

부울형은 값이 있으면 1을, 없으면 false를 반환합니다.

예제 (ex #4

 <?php
 $a 
= (bool)12.2345
;
 echo 
$a
// 결과: 1

 
$b = (bool)"다음 문자열은 부울형으로 변환합니다."
;
 echo 
$b
// 결과: 1

 // 값이 비어 있으므로 false를 반환합니다.
 
$c = (bool)" "
;
 echo 
$c
// 결과
 
?>


객체형으로 변환하기

예제 (ex #5

 <?php
 $a 
= (object)12.2345
;
 echo 
$a->scalar
// 결과: 12.2345

 
$b = (object)"문자열을 객체로 변환합니다."
;
 echo 
$b->scalar
// 결과: 문자열을 객체로 변환합니다.
 
?>


캐스팅으로 변수제거

예제 (ex #6

 <?php
 $a 
"변수를 삭제합니다."
;
 echo (unset)
$a
// 결과: 
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

php는 쉘 명령으로 실행할 수 있는 기능을 지원합니다. 역따옴표(``)를 사용하는 것인데, 이 기능은 shell_exec 함수와 동일합니다.

다음은 쉘 명령으로 mydir이라는 디렉토리를 생성시키고자 합니다.

예제 (ex #1
 <?php
 $output 
'mydir'
;
 `
mkdir $output`; 
// mydir 이라는 폴더를 생성합니다.
 
?>

역따옴표는 쉘 명령을 실행할 수 있어서 다른 사용자가 명령을 내리기전에 escapeshellarg()나 escapeshellcmd()를 이용하여, 위험한 명령을 실행하지 못하게 해야 합니다

예제 (ex #2
 <?php
 $e 
'mydir'
;
 
$output escapeshellcmd($e
);
 `
mkdir ${output}`; 
// mydir 이라는 폴더를 생성합니다.
 
`chmod 0707 ${output
}`;
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

기본 할당 연산자는 "="입니다. 왼쪽 연산수, 즉 변수가 표현식의 값으로 설정됨을 의미합니다. 그러므로 할당 연산자의 값은 할당된 값이므로 "$a = 3"의 값은 3으로 할당되었다고 표현합니다.

 $변수 = 표현식;

예제 (ex #1

 <?php
 $a 
= ($b 4) + 5
// $a는 9로 할당되고 $b는 4로 할당됩니다.

 
echo "${a} , ${b}"
// 결과 9 , 4

 
?> 


예제 (ex #2

 <?php
 $a 
1
;
 
$b 5
;
 
$c 8
;
 
$d 4
;

 
$d $a +5
;
 
$x $b $c $d
;

 echo 
$x
// 결과: 6
 
echo $b
// 결과 : 6
 
echo $c
// 결과: 6
 ?> 


처음 할당은 $a에 5를 더한 값을 $d에 할당했지만 $b와 $c에도 동일 값으로 할당했으므로 원래의 값은 더이상 유지하지 못합니다.
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

비교 연산자는 말그대로 두 값을 비교하여 참, 거짓여부를 결정합니다.

  예  제                  결      과
 $a == $b  $a와 $b가 같으면 true
 $a === $b  $a와 $b가 같고, 같은 자료형이면 true
 $a != $b  $a가 $b와 같지 않으면 true
 $a <> $b  $a가 $b와 같지 않으면 true
 $a !== $b  $a가 $b와 같지 않거나, 같은 자료형이 아니면 true
 $a < $b  $a가 $b보다 작으면 true
 $a > $b  $a가 $b보다 크면 true
 $a <= $b  $a가 $b보다 작거나 같으면 true
 $a >= $b  $a가 $b보다 크거나 같으면 true

예제 (ex #1
 <?php
 $a 
1
;
 
$b 2
;
 
 if(
$a == $b) { 
// 참이면 실행
    
echo "a와 b는 같습니다."
;
 } else { 
// 거짓이면 실행
    
echo "a와 b는 같지 않습니다."
;
 }
 
 
/*
 결과:
 a와 b는 같지 않습니다.
 */
 
?>

예제 (ex #2
 <?php
 $a 
1
;
 
$b 2
;
 
 if(
$a != $b) { 
// 참이면 실행
    
echo "a와 b는 같지 않습니다."
;
 } else { 
// 거짓이면 실행
    
echo "a와 b는 같습니다."
;
 }
 
 
/*
 결과:
 a와 b는 같지 않습니다.
 */
 
?>

예제 (ex #3
 <?php
 $a 
1
;
 
$b 2
;
 
 if(
$a $b) { 
// 참이면 실행
    
echo "a는 b보다 큽니다."
;
 } else { 
// 거짓이면 실행
    
echo "a는 b보다 크지 않습니다."
;
 }
 
 
/*
 결과:
 a는 b보다 크지 않습니다.
 */
 
?>

==와 ===의 차이는 자료형, 즉 문자열까지 비교하는데, 이 기능은 좀더 엄격하게 비교하는 것입니다. 다음 표를 보면 이해되리라 봅니다.

예제 (ex #4
 <?php
 $a 
2
;
 
$b "2"
;
 
 if(
$a == $b) { 
// 참이면 실행
    
echo "a와 b는 같습니다."
;
 } else { 
// 거짓이면 실행
    
echo "a와 b는 같지 않습니다."
;
 }


 
/*
 결과:
 a와 b는 같습니다.
 */


 
if($a === $b) { 
// 참이면 실행
    
echo "a와 b는 같습니다."
;
 } else { 
// 거짓이면 실행
    
echo "a와 b는 같지 않습니다."
;
 }
 
 
/*
 결과:
 a와 b는 같지 않습니다.
 */
 
?>

다음 자료형 비교표에서 다양한 자료형 관련 비교의 예제를 확인해 볼 수 있습니다.



블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

표현식(expressions)이란 php코드를 통해 어떤 데이터값을 얻을 때를 말하는데, 표현식에서도 리터럴, 변수,상수, 연산자가 있습니다.

 $변수 = 표현식;

연산자(Operation)에도 산술 연산자, 대입 연산자, 비교 연산자, 비트 연산자, 논리 연산자, 문자열 연산자, 형변환 연산자, 삼항(Ternary) 연산자 등등 php입문시 가장 중요하게 여겨질 만큼 큰 비중을 차지하는 게 연산자라 할 수 있습니다.

연산자중에서 기본적인 연산자는 산술 연산자로서 다음 표에 익숙할 것입니다.

  연산자     역할
 +  덧셈 연산자
 -  뺄셈 연산자
 *  곱셈 연산자
 /   나눗셈 연산자
 %  나머지 연산자
 ++  1증가 연산자
 --  1감소 연산자

예제 (ex #1
 <?php
 $a 
10
;
 
$b 20
;

 echo 
$a $b
// 결과: 30

 
?>

정수나 실수, 10진수, 8진수, 16진수로 표현할 때도 큰 따옴표나 작은 따옴표로 감싸주면 문자열로 인식하여 엉뚱한 산술이 되는 경우가 있으니 주의가 필요합니다.

예제 (ex #2

 <?php
 $a 
1
;
 
$b 2
;
 
$c 3
;
 
$x $a $b
;

 
$d $a +=$b +=$c += 5
;

 echo 
$x
// 결과: 3

 
echo $d
// 결과: 11
 
echo $a
// 결과: 11
 
echo $b
// 결과: 10
 
echo $c
// 결과: 8

 
?> 


음수로도 표현 가능합니다.

예제 (ex #3

 <?php
 $a 
1
;
 
$b 2
;
 
$c 3
;
 
$x $a $b
;

 
$d $a +=$b +=$c -= 5
;

 echo 
$x.'<br/>'
// 결과: -1
 
echo $d.'<br/>'
// 결과: 1
 
echo $a.'<br/>'
// 결과: 1
 
echo $b.'<br/>'
// 결과: 0

 
echo $c
// 결과: -2

 
?> 


실수나 8진수, 16진수, 10진수도 가능하므로 다음 표를 보면 알 수 있으리라 봅니다.

예제 (ex #4

 <?php
 $a 
120.25
// 실수형
 
$b 0.45e4
// 지수형
 
$c 01234
// 8진수
 
$d 0x456
// 16진수
 
$e 15
;

 echo 
$c $d
// 결과: 1778
 
echo $d $b
// 결과: 5610
 
echo $e $b
// 결과: -4485

 
?> 


1증가, 1감소 연산의 표현은 ++$var와 $var++의 차이를 이해하여야 합니다.

증가/감소 연산자
   예  제              효      과
 ++$a  $a를 1 증가하고, $a를 반환.
 $a++  $a를 반환하고, $a를 1 증가.
 --$a  $a를 1 감소하고, $a를 반환.
 $a--  $a를 반환하고, $a를 1 감소

예제 (ex #5

 <?php
 $a 
1
;
 
$b 2
;
 
$c 3
;

 echo ++
$a.'<br/>'
// 결과: 2
 
echo ++$a.'<br/>'
// 결과: 3
 
echo ++$a.'<br/>'
// 결과: 4

 
echo $b++.'<br/>'
// 결과: 2
 
echo $b++.'<br/>'
// 결과: 3
 
echo $b++.'<br/>'
// 결과: 4

 
echo $c--.'<br/>'
// 결과: 3
 
echo --$c.'<br/>'
// 결과: 1

 
?> 


증가 연산자는 숫자 뿐만 아니라 알파벳에도 영향을 받습니다. 알파벳 대소문자 구분없이 a-z만 지원하고 감소연산자는 사용할 수 없습니다.

예제 (ex $6

 <?php
 $i 
'W'
;
 for (
$n=0$n<6$n
++) {
    echo ++
$i "\n"
;
 }

 
/*
 결과:
 X
 Y
 Z
 AA
 AB
 AC
 */
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요