PHP - 제어구조

2 minute read

제어구조

‘이 정도는 다 알고 있게지?’.. 라고 생각되는 아주 기본적인 부분.(이걸 모르면 프로그래밍을 할 수 없다.

  • if : 조건의 참,거짓으로 동작을 제어
  • if($boolean)
    {~}
    else if($boolean2)
    {
    ~}
    else
    {~~~}
  • else if(=esleif) 와 else는 없을 수 있다.

  • if($boolean):
    elseif($boolean2):   
    

    else:
    ~~~
    endif;

  • “대체 문법”, “콜른 문법”이라고 불린다.
  • 대괄호를 사용하지 않고 endif처럼 표현하기 때문에 view쪽의 HTML이 복잡한 곳에 사용하기 좋다.
  • esleif 와 else는 없을 수 있다.
    else if를 사용할 수 없다.

  • while : 조건이 참일 동안 계속 반복
  • while($boolean){
    ~~~
    }
  • while($boolean):
    ~~~
    endwhile;

  • do-while : 최초 무조건 1번은 실행하는 while
  • do{
    ~~~
    }while($boolean);
  • 한마디 : 거의 쓰이지 않는다.

  • for : 지정 조건을 만족할 동안 반복, 반복할 때마다 조건을 바꿔줄 수 있음.
  • for($i=0;$i<10;$i++){
    ~~~
    }
  • for($i=0;$i<10;$i++):
    ~~~
    endfor;

  • foreach : 배열을 루프하는 가장 쉬운 방법. (객체도 루프할 수 있다.)
  • foreach($rows as $k=>$row){
    ~~~
    }
  • foreach($rows as $row) :$k는 없을 수 있다.
  • foreach($rows as $k=> & $row) : $row를 참조로 사용할 수 있다. (이경우 루프 후에 unset($row) 해주는게 좋다. 꼭)

  • foreach($rows as $k=>$row):
    ~~~
    endforeach;
  • foreach는 php 버전별로 동작이 조금씩 다른 부분이 있다. 사용시 주의하라!
  • 한마디 : 아주 자주 사용된다! 꼭 익혀놓자.

  • switch : if 문과 수행이 비슷하다. 동일 코드 파편을 좀더 실행할 경우 사용한다.(느슨한 비교(==)를 사용함에 주의!)
  • switch($k){
      case ‘a’:~;break;
      case ‘b’:
    ~;
      case ‘c’:~;break;
      case ‘d’:
    ~;break;
    }
  • a,c,d는 전부 기 부분만 실행하고 switch 를 나오지만,
    b 인 경우 b부분 실행후 c까지 switch 를 실행하고 나온다.

  • switch($k):
      case ‘a’:~;break;
      case ‘b’:
    ~;
      case ‘c’:~;break;
      case ‘d’:
    ~;break;
    endswitch;

  • break : 루프를 종료한다.
  • while,do-while, for, foreach , switch 등에서 사용할 수 있다.
  • break;  // or break 1; 
  • 를 만다면 해당 루프문 밖으로 나간다.

  • break 2;
  • 를 만다면 해당 루프문 하고 그 밖의 루프문 밖으로 나간다.

  • 말로만 설명하기 어렵다 링크타고가고 에제가 외 그런지 생각해보자.

  • continue : 현재 루프를 끝내고 다음 루프를 동작시킨다.
  • continue; // or continue 1;
  • 를 만나면, 현재 루프를 중지하고 다음 루프를 실행한다.

  • continue 2;
  • 를 만나면, 동작 루프문의 밖의 루프문을 기준으로 현재 루프를 중지하고 다음 루프를 실행한다.

  • 말로만 설명하기 어렵다 링크타고가고 에제가 외 그런지 생각해보자.

  • declare : 코드의 동작 레발에 따라 체크할 수 있도록 해준다.
  • <?php
        function myfunc() {
            print “In tick func\n”;
        }
    $i = 10;
        register_tick_function(“myfunc”);
        declare(ticks=4) {
            while($i–){
                    echo $i.’—’;
            }
        }
    ?>
  • declare 속에 있는 구문의 저레벨 동작에 따라 이벤트가 발생하면 ticks 로 선언된 횟수가 되면
    register_tick_function 에 등록된 함수가 실행된다.
  • 한마디 : 솔찍이 이날평생 한번도 써번 적이 없다.
  • declare(strict_types=1);
  • 이걸 선언할 경우 함수 사용에 type hint를 선언할 경우 그 타입에 안 맞으면 fatal error가 발생한다.

  • return : 함수내에서 결과를 반환한다.
  • function a(){
      $x = ‘123’;
      return $x;
    }
  •  inlude()나 requrie()의 파일 속에서 사용되었다면
    $x =  inlude(‘a.php’);
    처럼 값을 받아와서 사용할 수 있다.

  • 하지만 이렇게 만들지말고 차리리 함수등으로 만들어서 명식적으로 부르도록 하라!

  • include, require, include_once, require_once
  • 대상 파일을 현파일로 inlcude 시킨후 소스를 사용하도록 한다.
  • include vs require
  • include 는 실패시 Warning 발생
  • require 는 실패시 Fatal Error발생.
  • 중요 파일을 include 하고 싶다면 require 를 사용하라!!

  • include vs include_once
  • include : 여러번 include 할 수 있음.
  • include_once : 최고 한번만 include 됨
  • 함수, 라이브러리, 클래스 같은 파일이라면 include_once 를 사용하라!

  • 한마디 : 이걸 모르면 바보 같이 한 파일안에 다 적어놔야한다. 

  • goto : 특정 라벨로 동작을 이동시킨다.
  • 해줄말 없다. 될 수 있으면 사용하지 말라.
  • php 5.3이상에서 사용가능.
  • C언에서도 될 수 있으면 사용하지 말라고 되어있다.
  • 단순한 한 파일에서 사용하면 문제가 안되지만… 여러 파일에 여러 라벨들이 들어있다만, 지옥을 보게 된다고 한다.

  • goto a;
    echo ‘Foo’;
     
    a:
    echo ‘Bar’;
  • echo ‘Foo’;는 실행이 안될 것이다.

🔗original-link

Updated: