[PHP] 조건문과 반복문

Dev_Honey·2022년 10월 8일
0

PHP

목록 보기
8/11
post-thumbnail

📜 조건문과 반복문

1.조건문

Boolean
'비교 수업'에서 비교 연산의 결과로 참(true)이나 거짓(false)을 얻을 수 있다고 배웠다. 여기서 참과 거짓은 '숫자와 문자 수업'에서 배운 숫자와 문자처럼 언어에서 제공하는 데이터 형이다. 이를 Boolean(불린)이라고 부르고 불린으로 올 수 있는 값은 true와 false 두가지 밖에 없다. 불린은 조건문에서 핵심적인 역할을 담당한다.

조건문이란 주어진 조건에 따라서 에플리케이션을 다르게 동작하도록 하는 것이다.

if
조건문은 if로 시작한다. if 뒤에 괄호가 오고, 괄호 안에 조건이 위치한다. 조건이 될 수 있는 값는 Boolean이다. Boolean의 값이 true라면 조건을 감싸고 있는 괄호 다음의 중괄호 구간이 실행된다.

<?php
//조건문
//조건문 기본 문법은 if(조건){조건문이 True일 때, 실행될 코드} 이다.
if(true){
    echo 'result : true';
}
?>

결과

else
if만으로는 좀 더 복잡한 상황을 처리하는데 부족하다
if 조건문 외의 상황에 대해서는 else{ }를 통해서 { }안의 코드를 실행할 수 있다.

<?php
if(true){
    echo 1;
} else{
    echo 2;
}
?>

결과

true이기 때문에 1이 출력되고, else안의 코드는 실행이 되지 않는다.
만약 반대로 if 조건문이 false라면 else코드안의 2가 출력될 것이다.

else if
else if는 좀 더 다양한 케이스의 조건을 검사할 수 있는 기회를 제공한다. else if의 특징은 if나 else와는 다르게 여러개가 올 수 있다는 점이다. elif의 모든 조건이 false라면 else가 실행된다. else는 생략 가능하다.
else if 문이 많더라도, 조건이 True인 부분에서 코드는 실행이되고 종결이된다.

  <?php
if (false){
    echo 1;
} else if (false){
    echo 2;
} else if (false){
    echo 3;
} else {
    echo 4;
}
?>

결과
4만 출력이된다.

변수와 비교연산자 그리고 조건문

간단한 형태의 로그인 에플리케이션을 구현해보자. 우선 아이디를 입력할 수 있는 HTML 폼을 만든다. 그리고 HTML 폼에서 전송한 데이터를 처리 할 PHP 에플리케이션을 만든다.

조건문의중첩

아이디와 비밀번호의 검증

<html>
<body>
  <form method="get" action="11.php">
    <input type="text" name="id" />
    <input type="submit" />
  </form>
</body>
</html>
  <?php
if($_GET['id'] === 'egoing'){
    echo 'right';
} else {
    echo 'wrong';
}
?>

아이디가 맞는지 검증!!

지금 검증코드에 egoing에 대해서 조건을 걸어놓았다.

going을 입력하고 제출을하게 되면 어떻게 되겠는가? 당연히 조건문인 if문은 False가 되고, else에 해당하는 wrong이라는 word가 echo될 것이다.

하지만, 정확히 egoing을 입력하게 되면,


이렇게 right라고 검증을 통해 나타난다.
Tip)
비밀번호 또한 같다. 만약, 회원가입을 하는데 아이디를 중복검사하고싶다고하자! 그러면 로직은 서버에 입력한 아이디를 보내고, 서버에서는 DB에 접근을 해서 USER정보가 있는 Table의 정보를 가져와서 그중 ID값이 입력한 ID가 있는지 체크를한다. 체크를 해서 있다면이 if조건문이되고, 만약 없으면 else문으로 브라우저에 해당 아이디가 존재하지 않는다고 메시지를 보내면 될 것이다.
또한,로그인할 때는 아이디와 비밀번호 또한 같은 로직으로 하면되는데,비밀번호는 보통 DB에 push할 때 hash된 비밀번호를 넣으니 이 hash 비밀번호를 가져와 decode해서 검증 후, 맞으면 토큰을 발급하든 세션을 만들고 브라우저에서도 계정정보가 유지될 수 있게 만들어 주면, 로그인이 되고 유지되는 API가 완성될 것이다.

ID와 password 검증
코드
브라우저

<html>
<body>
    <form method="post" action="13.php">
        id :  <input type="text" name="id" />
        password : <input type="password" name="password" />
        <input type="submit" />
    </form>
</body>
</html>

서버

  <?php
if($_POST['id'] === 'test'){
    if($_POST['password'] === '12345'){
        echo 'right';
    } else {
        echo 'password wrong';
    }   
} else {
    echo 'id wrong';
}
?>


아이디에 test 비번을 12345를 입력해보았다.
결과는

그리고 아이디값을 다르게 입력해보면

그리고 비밀번호를 다르게 입력해보면,

이렇게 결과가 나온다.
여타 다른 프로그래밍 언어와 같이 if조건문의 { }안에 다시 if { } 문을 걸 수가 있다는 점!!

논리연산자

and
and는 좌항과 우항이 모두 참(true)일 때 참이된다. &&를 사용해도 된다.

  <?php
if (true and true) {
    echo 1;
}
if (true and false) {
    echo 2;
}
if (false and true) {
    echo 3;
}
if (false and false) {
    echo 4;
}
?>


1이 출력되는 이유는 and는 좌항과 우항이 둘 다 true여야만 조건문이 true가 되기 때문에, 현재 둘 다 true인 것은 echo1이 출력되는 if 조건문 뿐이다.
ID, 비밀번호 검증에서 굳이 if조건절을 종속시켜서 사용할 필요가 없고 그냥 &&로 둘 다 true임을 검증하면 된다.
코드

<html>
<body>
    <form method="post" action="16.php">
        id :  <input type="text" name="id" />
        password : <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
  <?php
if($_POST['id'] === 'test' && $_POST['password'] === '12345'){
    echo 'right';
} else {
    echo 'wrong';
}
?>

그래서 ID 값에 test, password 값에 12345를 입력하면 right가 출력이 될 것이고, ID or password 둘 중 하나라도 다르게 입력이되면 wrong을 출력할 것이다.
하지만 보통 ID값이 틀렸는지, 비밀번호 값이 틀렸는지를 정확히 알기 위해서는 if 조건문을 분화시키는게 맞다고 본다.
맞는 조건을 입력한 결과는,


이렇게 결과가 나온다.

or
or는 or의 좌우항 중에 하나라도 true라면 true가 되는 논리 연산자

  <?php
if (true or true) {
    echo 1;		#출력
}
if (true or false) {
    echo 2;		#출력
}
if (false or true) {
    echo 3;		#출력
}
if (false or false) {
    echo 4;		#둘 다 False이므로 출력이 되지 않음
}
?>

결과

여러가지 회원 정보 중 로그인 아이디가 있을 때 true를 반환하는 코드

<html>
<body>
    <form method="post" action="19.php">
        id :  <input type="text" name="id" />
        <input type="submit" />
    </form>
</body>
</html>
  <?php
if($_POST['id'] === 'test' or $_POST['id'] === 'test02' or $_POST['id'] === 'test03
'){
    echo 'right';
} else {
    echo 'wrong';
}
?>



조건문에 있는 id일 경우 위와 같은 결과


없는 id일 경우 위와 같은 결과
그래서 id data를 배열에 넣어서 list의 인덱스를 돌면서 값이 있는지 확인하고 결과를 출력할 수도 있다!
같은 로직이지만 and 와 or 를 섞어서 사용할 수 있다.
코드

<html>
<body>
<form method="post" action="21.php">
id : <input type="text" name="id" />
password : <input type="text" name="password" />
<input type="submit" />
</form>
</body>
</html>
  <?php
if(
    ($_POST['id'] === 'egoing' or $_POST['id'] === 'k8805' or $_POST['id'] === 'sorialgi')
    and
    $_POST['password'] === '111111'
){
    echo 'right';
} else {
    echo 'wrong';
}
?>

조건문에서 !의 사용은 !은 not을 의미한다.
만약 if(true){ } 면 { }의 코드를 실행시키는데, if(!true){ }면, !true는 false가되고 false가 된 값이 true가 되는 역전 현상이 일어나고, !true가 return이 true면 { } 안의 코드가 실행이 된다.

  <?php
if (!true and !true){
    echo 1;
}
if (!true and !false){
    echo 2;
}
if (!false and !true){
    echo 3;
}
if (!false and !false){
    echo 4;
}
?>

결과

Boolean값을 꼭 True or False로만 사용할 필요는 없다.

  <?php
if (1 and 1) {
    echo 1;
}
if (1 and 0) {
    echo 2;
}
if (0 and 1) {
    echo 3;
}
if (0 and 0) {
    echo 4;
}
?>

결과

PHP는 형변환을 0은 false를 0이외의 숫자는 true를 나타낸다.
1 and 1은 true and true 결과는 true
1 and 0은 true and false 결과는 false
0 and 1은 false and true 결과는 false
0 and 0은 false and false 결과는 false
그래서 출력되는 값은 1뿐이다.

PHP 공식문서에서 type comparison

gettype(),empty(),is_null(),isset(),bool 내장함수에 대한 return값을 표현 한 것이 해당 테이블의 값들

  • isset()은 값이 할당되어있는지를 확인하는 함수

type의 느슨한 또는 엄격한 비교


문법을 느슨하게 짜도 될 경우가있고, 어쩔 때는 완전 strict하게 짜야될 때가 있는데, 그때 잘 참고해서 코드를 짜게되면, 오류로 인한 이슈를 줄여 줄 수 있다.


2.반복문

반복문은 프로그래밍에서 가장 중요한 요소 중의 하나
말 그대로 코드를 반복시킬 때 사용하는 문법이다.
가장 많이 사용하는 반복문은 for문, while문이 있다.

while문

기본문법

while(조건){
    코드
    코드
}

예제

<?php
while(true) {
    echo 'coding everybody';
}
// 무한반복문
// 현재 이 코드에서 정지하는 코드가 없다.
?>

결과

while(false){ } false가 되면, 반복문은 돌지 않는다.
false부분에 변수를 넣고 원하는 만큼의 반복 수를 설정 한 후 코드를 반복시킨다.

<?php
# i의 값으로 0을 할당한다. 
$i = 0;
# 종료조건으로 i의 값이 5보다 작다면 true, 같거나 크다면 false
while($i < 5){
    echo 'coding everybody';
    # 반복문이 실행될 때마다 i의 값을 1씩 증가시킨다. 그 결과 i의 값이 5가 되면 종료조건이 false가 되면서 반복문이 종료된다.
    $i += 1;
}
?>

변수 i는 0부터 시작해서 4까지 반복한다. 그래서 5번 반복을 한다. i가 5가 됐을 때는 false이므로 반복이 중지되는 것!
$i += 1 은 반복할 때마다, i를 1씩 증가시킨다는 말이다.
결과

<html>
<body>
<?php
$i = 1;
while($i <= 10){
    echo "coding everybody{$i}<br />";
    $i++;
}
?>
</body>
</html>

결과

위의 코드처럼 echo "coding everybody{$i}
" 이렇게 중괄호 안에 변수를 넣으면 값이 출력이된다.

for문

기본문법

for(초기화; 반복 지속 여부; 반복 실행){
    코드;
}

for문예제

<html>
<body>
<?php
for($i = 0; $i < 10; $i++){
  //변수 i의 시작지점은 0(반복문이 실행될 때, ![](https://velog.velcdn.com/images/chaos663/post/820c6c76-c9eb-4450-9333-6c12df7fad3d/image.png)
초기화 지점), i는 10보다 작을 때 까지, $i++은 i가 1씩 증가한다는 의미===$i += 1;
    echo 'coding everybody'.$i."<br />";
    //.$i.을 반복문 돌때마다 같이 찍어줌(0~9)
}
?>
</body>
</html>

만약 반복문이 없다면 쌩코드로는 다음과 같다.(사실 이정도는 쌩으로 적어도 되지만...)

<html>
<body>
<?php
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
echo 'coding everybody<br />';
?>
</body>
</html>

결과는 당연히 같다.

반복문의 제어

<html>
<body>
<?php
for($i = 0; $i < 10; $i++){
    if($i === 5){
        break;
    }
    echo "coding everybody{$i}<br />";
}
?>
</body>
</html>


i가 5일때 break라는 함수를 통해서 반복문이 중지되어 5번만 반복이된다.
break
반복작업을 중간에 중단시키고 싶을때 사용하는 함수.
아얘 다음 코드 및 반복이 중지된다.
continue
실행을 중지시키면서 반복을 계속 이어나가게 하는 함수.
해당 반복에서 continue 다음 코드는 중지되어 읽히지않으나, 남아있는 반복은 계속 진행이 되어 코드가 실행이된다.

<html>
<body>
<?php
for($i = 0; $i < 10; $i++){
    if($i === 5){
        continue;
    }
    echo "coding everybody{$i}<br />";
}
?>
</body>
</html>

결과

5에서 코드가 멈춰야하지만, 다시 반복문이 이어져서 6부터 계속 출력이 되는 것을 볼 수 있다.

반복문의 중첩(이중,삼중... for문)

<html>
<body>
<?php
for($i = 0; $i < 10; $i++){    
    for($j = 0; $j < 10; $j++){  
        echo "coding everybody{$i}{$j}<br />";
    }
}
?>
</body>
</html>


이렇게 $i는 9까지 그리고 j도 0~9까지 반복이 일어난다. 즉, i가 0일 때 j반복이 10번, 1일 때 j 반복이 10번 .... 해서 i가 9까지 j반복은 또 10번이 반복이되는 것이다.


참조 및 출처

https://opentutorials.org/course/3018/5122 생활코딩 조건문
https://www.php.net/manual/en/types.comparisons.php

profile
자습서 같은 공부 블로그 만들기!

0개의 댓글