본문 바로가기

코딩공부/WEB2 - PHP

[8] PHP 제어문 - 조건문, 반복문

 어떠한 일을 한다?

일을 이루고 있는 작업들, 그 일을 시간의 순서에 따라서 실행하는 것으로 구성된다.

일을 구성하는 핵심 - '작업' , '시간의 순서'

 

 컴퓨터를 통해서 어떠한 일을 한다?

컴퓨터가 갖고 있는 기본적인 기능들을 우리가 하고자 하는 일의 목적에 따라서, 시간의 순서에 따라서 실행하는 것

 

일들 중에는 반복되는 일, 사람이 하기 싫은 일을 "자동화"하고 싶다.

컴퓨터 프로그래머들은 이러한 일들을 자동화할 수 있도록 컴퓨터 프로그래밍 언어라는 것을 만들었다.

 

코드를 위에서부터 아래로 쭉 써 내려가면 시간의 순서에 따라서 그 코드가 가리키는 기능들을 실행하게 된다.

"두 가지 중요한 기능 - 조건문, 반복문"을 고안해 낸다.

 

조건문 - 시간의 순서에 따라서 코드가 실행이 되다가 어떤 조건에 따라서 서로 다른 시간의 순서 흐름에 따른 작업이 실행되도록 하는 것

반복문 - 어떠한 조건을 만족하는 동안에 특정 작업들이 반복적으로 실행되게 하는 것

 

이러한 조건문과 반복문은 "컴퓨터가 갖고 있는 '시간의 순서'의 흐름을 제어한다"라는 측면에서 "제어문"이라고 한다.

 

 

조건문

조건문을 어디에 사용할 것인가?

목표 : URL에 id 파라미터가 없다면, 홈에 적당한 정보를 출력하고, id파라미터가 있다면 id값에 해당되는 파일을 디렉터리에서 찾아서 본문의 내용을 출력해주는 애플리케이션을 만들고 싶다.

index.php라는 단 하나의 애플리케이션이 주어진 조건에 따라서 다르게 동작하게 하는 기능을 추가

 

 

Boolean 과 비교 연산자

Boolean(불리언) : '참(true)'과 '거짓(false)'의 값만 가진 데이터 타입

비교 연산자 : 비교 연산자는 Boolean 데이터 타입의 결괏값을 가진다.

php comparison operators

https://www.php.net/manual/en/language.operators.comparison.php

 

PHP: Comparison Operators - Manual

When you want to know if two arrays contain the same values, regardless of the values' order, you cannot use "==" or "===".  In other words: To answer that question, use: A related, but more strict problem, is if you need to ensure that two arrays contain

www.php.net

 

php에서 내용 출력 - echo 또는 print() 외에 var_dump() 함수가 있다.

var_dump( ) : '입력 값'과 '입력값의 데이터 타입'을 출력

 

var_dump(1+1)  => int(2)

1+1 에서 '+'라는 산술 연산자는 좌항과 우항의 값을 더한 결과가 숫자라는 데이터 타입이 되는 '표현식'이기 때문이다.

var_dump(1==1) ==> bool(true)

1==1에서 '=='라는 비교 연산자는 좌항과 우항의 값을 비교한 결과가 '참 or 거짓'이라는 데이터 타입이 되는 '표현식'이다.

 

 

조건문의 형식

php 조건문 문법

php conditional statements

※ 문법을 구성하는 양대 축

expr : expression. 값, 또는 최종적으로 값이 되는 표현식. 즉, '값'이 온다.

statement : 순수하게 값만 오는 것이 아니라 if문과 같은 문법이 온다. (if문 자체는 '값'이 아닌 문법이다.)

 

if() 안의 조건이 참이면 if(){} 안의 코드를 실행, 거짓이면 else {} 안의 코드를 실행한다.

 

 

프로그래밍 언어에서 가장 중요한 기본적인 동작 방법은 "시간의 순서에 따라서 동작한다"이다.

조건문을 이용해서 프로그램이 실행되는 순서를 제어할 수 있다.

 

조건문 활용 실습

목표 : url에 id값이 없다면, 본문에 "welcome"을 출력하게 하고 싶다.

 

 

php check if url parameter exists
php check value exists

isset() : 입력값이 있으면 true, 없으면 false

if(isset($_GET['id'])){
echo file_get_contents('./data/'.$_GET['id']);
}else{
echo "This is Javakong Homepage.";
}

 

 


반복문

 

 반복문을 어디에 사용할 것인가?

목표 : data디렉토리에 새로운 페이지에 대한 본문을 적은 'cake'파일을 생성하면, 자동으로 글 목록에 추가되고, 본문의 내용을 가져오도록 하고 싶다.

 

지금은 본문 페이지를 하나 더 생성하면, index.php 파일에 수동으로 link 태그로 추가해줘야 한다.

"데이터가 바뀌었다고 애플리케이션의 코드를 바꿔야 하는 상황"은 프로그래머로서 능력 없음

data 디렉터리에 파일(항목)이 추가되면 그것을 php가 알아서 인식해서 <li> 태그를 프로그래밍 적으로 생성하도록 한다. 관리자는 본문 파일만 추가하면 된다.

 

 

반복문의 형식

(공식문서) php 조건문 문법

site:php.net php loop statements

while() 안의 expr 조건이 참이 되는 동안 statement 코드가 반복적으로 실행

 

※ 무한루프

끝이 없이 무한히 반복문을 실행한다. 일반적으로는 무한루프는 심각한 결함이다. 

ex) while(true){ ...code....}

 

따라서 반드시 반복문의 조건이 상황에 따라 true, false가 되도록 설정해줘야 한다.

 

 

배열의 형식

숫자, 문자, blool과 같은 데이터들을 배열이라는 수납상자에 정리 정돈할 수 있다.

site:php.net array

 

아래 부분이 4개의 문자열 데이터를 담고 있는 배열의 "표현식"이다. 이 값을 변수에 담아서 사용한다.

array('egoing', 'leezche', 'duru', 'taeho');

 

"배열"이라는 복합적인 "데이터 타입"을 배우는 것이다.

 

배열의 값을 가져올 때는 인덱스(index)를 이용해서 꺼내올 수 있다. 인덱스는 0부터 시작

 

count() : 배열의 elements(원소, 요소)의 개수를 리턴

php array total count

 

array_push() : 배열에 데이터를 추가

php array add value

 

배열의 중간 자리에 데이터를 추가, 삭제하는 함수는?

php array -> Array Functions 배열을 다루는 함수의 목록 중 이름으로 유추해서 확인해 나가면 된다.

 

 

반복문과 배열의 활용 실습

php get file list in directory
(찾은 함수를 공식문서로 다시 검색해서 보는 것도 추천)
site:php.net scandir

scandir() : 입력받은 경로에 있는 파일과 디렉터리의 목록을 배열로 가져온다.

 

큰따옴표(")가 PHP에서 문자의 시작과 끝을 나타내는 구분자가 아니라 그냥 문자라는 것을 PHP에게 알려주기 위해서 역슬래시(\)를 앞에 써준다. 역슬래시(\) 직후에 나오는 특수문자를 문법적인 기능을 무시하고 단순한 문자로 처리한다.

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1><a href="index.php">Javakong</h1>
    <ol>
      <?php
        $list = scandir('./data/');
        #var_dump($list);
        $i=2;
        while($i<count($list)){
          $lstr = "<li><h3><a href=\"index.php?id=".$list[$i]."\">".$list[$i]."</a></h3></li>";
          echo $lstr;
          #echo "<li><h3><a href=\"index.php?id=$list[$i]\">$list[$i]</a></h3></li>\n";
          $i++;
        }
       ?>
      <!-- <li><h3><a href="index.php?id=coffee">커피</a></h3></li>
      <li><h3><a href="index.php?id=tea">차</a></h3></li>
      <li><h3><a href="index.php?id=bread">빵</a></h3></li> -->
    </ol>
    <h2>
      <?php
      if(isset($_GET['id'])){
        echo $_GET['id'];
      }else{
        echo "Welcome";
      }
      ?>
    </h2>
    <?php
      if(isset($_GET['id'])){
        echo file_get_contents('./data/'.$_GET['id']);
      }else{
        echo "This is Javakong Homepage.";
      }
     ?>
  </body>
</html>

 

소스코드 보기를 통해 목록 <li> 태그가 자동으로 생성된 것을 확인할 수 있다.

 

scandir()은 보통 첫번째와 두번째 값으로 점(. 현재 dir정보)과 점점(.. 상위 dir 정보)를 리턴하지만, 언제나 첫번째와 두번째로 이 정보가 들어올 것이라는 확신이 없기 때문에, 반복문 인덱스를 2로 시작하는 것보다 조건문으로 불필요한 정보를 출력하지 않도록 코딩하는 것이 좋다.

$i=0;
while($i<count($list)){
  if($list[$i] != '.'){
    if($list[$i] != '..'){
    	echo "<li><h3><a href=\"index.php?id=$list[$i]\">$list[$i]</a></h3></li>\n";
    }
   }
  $i++;
}

 

 

 

 

 

 

 

 

 

 

 

'코딩공부 > WEB2 - PHP' 카테고리의 다른 글

[10] PHP에서 FROM과 GET, POST  (0) 2019.09.26
[9] PHP 함수 생성  (0) 2019.09.26
[7] PHP 함수 - Built in Function  (0) 2019.09.25
[6] PHP의 URL 파라미터  (0) 2019.09.25
[5] PHP 변수  (0) 2019.09.25