php) 연산자, 반복문

<style>body{font-size: xx-large;}</style>
<title>php 기본문법</title>
<body>
<?php
// 연산자
    // 산술 연산자
    /*
     * +    왼쪽의 피연산자에게 오른쪽의 피연산자를 더함
     * -    왼쪽의 피연산자에게 오른쪽의 피연산자를 뺌
     * *    왼쪽의 피연산자에게 오른쪽의 피연산자를 곱함
     * /    왼쪽의 피연산자에게 오른쪽의 피연산자로 나눔
     * %    왼쪽의 피연산자에게 오른쪽의 피연산자로 나눈 후, 그 나머지를 반환함
     * **   왼쪽 피연산자의 값에 오른쪽 피연산자의 값을 제곱함
     */
    $num_01 = 10;
    $num_02 = 4;
    echo "10 + 4 = ".($num_01 + $num_02)."<br/>";      // 14
    echo "10 - 4 = ".($num_01 - $num_02)."<br/>";       // 6
    echo "10 * 4 = ".($num_01 * $num_02)."<br/>";       // 40
    echo "10 / 4 = ".($num_01 / $num_02)."<br/>";       // 2.5
    echo "10 % 4 = ".($num_01 % $num_02)."<br/>";       // 2
    echo "10 ** 4 = ".($num_01 ** $num_02)."<br/>";     // 10000
    // 대입연산자
        /*
         * 대임연사자
         * =    왼쪽의 피연산자에 오른쪽의 피연산자를 대입함.ㅌ
         */
        /*
         * 복합연사자
         * +=   왼쪽의 피연산자에게 오른쪽의 피연산자를 더한 후, 왼쪽의 피연산자에 대입함
         * -=   왼쪽의 피연산자에게 오른쪽의 피연산자를 뺀 후, 왼쪽의 피연산자에 대입함
         * *=   왼쪽의 피연산자에게 오른쪽의 피연산자를 곱한 후, 왼쪽의 피연산자에 대입함
         * /=   왼쪽의 피연산자에게 오른쪽의 피연산자로 나눈 후, 왼쪽의 피연산자에 대입함
         * %=   왼쪽의 피연산자에게 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입함
         * .=   왼쪽 피연산자의 문자열에 오른쪽 피연산자의 문자열을 추가한 후, 왼쪽의 피연산자에 대입함
         * <<=  왼쪽의 피연산자의 비트를 오른쪽의 피연산자만큼 전부왼쪽으로 이동시킨 후, 그 결과를 왼쪽의 피연산자에 대입함
         * >>=  왼쪽의 피연산자의 비트와 부호를 유지하면서 오른쪽의 피연산자만큼 전부 오른쪽으로 이동시킨 후, 그 결과를 왼쪽의 피연산자에 대입함
         * &=   왼쪽 피연산자의 논리식과 오른쪽 피연산자의 논리식이 모두 true이면 왼쪽의 피연산자에 true를 대입하고, 그 외에는 false를 대입함
         * !=   왼쪽 피연산자의 논리식이나 오른쪽 피연산자의 논리식이 중 하나라도 true이면 왼쪽의 피연산자에 true를 대입하고, 그 외에는 false를 대입함
         * ^=   왼쪽 피연산자의 논리식과 오른쪽 피연산자의 논리식이 서로 다르면 왼쪽의 피연산자에 true를 대입하고, 그 외에는 false를 대입함.
         */
    // 증감 연산자
        /*
         * 증감연산자
         * ++$var   먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 수행함
         * $var++   먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 증가시킴
         * --$var   먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 수행함
         * $var--   먼저
         */
    // 비교 연산자
        /*
         * 비교 언산자
         * ==   왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 참을 반환함
         * ===  왼쪽의 피연산자와 오른쪽의 피연산자가 같고, 같은 타입이면 참을 반환함
         * !=   왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함
         * <>   왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함
         * !==  왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않거나, 타입이 다르면 참을 반환함
         * <    왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 참을 반환함
         * <=   왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 참을 반환함
         * >    왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 참을 반환함
         * >=   왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 참을 반환함.
         */
        /*
         * 다양한 타입의 비교
         * bool, null
         * 모두
         * 둘 다 불리언으로 변환한 후 비교함.
         * string, resource, integer, float
         * string, resource, integer, float
         * 숫자로 시작하는 문자열과 리소스는 숫자로 변환한 후 비교함
         * object
         * object
         * 내장 클래스는 자신의 비교 함수를 정의할 수 있으나, 다른 클래스끼리 비교할 수는 없음
         * array
         * array
         * 배열끼리의 비교는 같은 키를 가지는 값을 서로 비교함 이때 피연산자1 배열의 키가 피연산자2 배열에 존재하지 않으면 비교할 수 없으며, 배열 요소의 수가 적은 쪽이 작다고 판단됨
         * array
         * 모두
         * 배열이 항상 크다고 판단됨
         * object
         * 모두
         * 객체가 항상 크다고 판단됨
         */
    // 논리 연산자
    /*
     * and  논리식이 모두 참이면 참을 반환함. (AND 연산)
     * or   논리식 중에서 하나라도 참이면 참을 반환함. (OR 연산)
     * xor  논리식이 서로 다르면 참을 반환함. (XOR 연산)
     * &&   논리식이 모두 참이면 참을 반환함. (AND 연산)
     * ||   논리식 중에서 하나라도 참이면 참을 반환함. (OR 연산)
     * !    논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (NOT 연산)
     *
     * A        B       A and B (A && B)        A or B (A || B)     A xor B     !A
     * true     true    true                    true                false       false
     * true     false   false                   true                true        false
     * false    true    false                   true               	true	    true
     * false	false	false	                false	            false   	true
     */
    // 비트 연산자
    /*
     * &    대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산)
     * |    대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
     * ^    대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
     * ~    비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산)
     * <<   지정한 수만큼 비트를 전부 왼쪽으로 이동시킴. (left shift 연산)
     * >>   부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)
     */
    // 기타 연산자
        // 삼항 연사자
        /*
         * 문자열 연산자(.)를 사용하여 문자열을 연결할 수 있다 또한, echo() 함수에서는 쉼표 연산자(,)를 이용하여 문자열을 연결할 수 있다
         */
        $num_01 = 10;
        $num_02 = 4;
        $result = ($num_01 > $num_02) ? $num_01 : $num_02;
        echo "둘 중에 더 큰 수는 {$result} 입니다.";
        // 문자열 연산자
        $str_01 = "Hello";
        $str_02 = "World";
        echo $str_01.$str_02."<br/>";
        echo $str_01,$str_02;
        // 배열 합집합 연산자
        /*
         * 배열 합집합 연산자(+)는 피연산자로 오는 두 배열의 합집합을 반환 왼쪽 피연산자의 배열의 키 값 유지하면서, 오른쪽 피연산자의 배열을 덧붙이는 방식을 취한다
         */
        // 키값 동일시
        $arr_01 = array("1st" => "PHP", "2nd" => "MySQL");
        $arr_02 = array("1st" => "HTML", "2nd" => "CSS", "3rd" => "JavaScript");
        $result_01 = $arr_01 + $arr_02; // [PHP, MySQL, JavaScript]
        var_dump($result_01);
        $result_02 = $arr_02 + $arr_01; // [HTML, CSS, JavaScript]
        var_dump($result_02);
        // 키값 다를때
        $arr_01 = array("1" => "PHP", "2" => "MySQL");
        $arr_02 = array("3" => "HTML", "4" => "CSS", "5" => "JavaScript");
        $result_01 = $arr_01 + $arr_02; // [PHP, MySQL, HTML, CSS, JavaScript]
        var_dump($result_01);
        $result_02 = $arr_02 + $arr_01; // [HTML, CSS, JavaScript, PHP, MySQL]
        var_dump($result_02);
        // 키값을 명시하지 않을 때
        $arr_01 = array("PHP", "MySQL");
        $arr_02 = array("HTML", "CSS", "JavaScript");
        $result_01 = $arr_01 + $arr_02; // [PHP, MySQL, JavaScript]
        var_dump($result_01);
        $result_02 = $arr_02 + $arr_01; // [HTML, CSS, JavaScript]
        var_dump($result_02);
        // instanceof 연산자
        /*
         * 해당 변수가 어떤 클래스(class)에서 생성된 객체(object)인지를 확인할 때
         * 해당 변수가 부모 클래스(parent class)에서 상속받은 클래스인지를 확인할 때
         * 해당 변수가 클래스의 인스턴스(instance)인지 아닌지를 확인할 때
         * 해당 변수가 인터페이스(interface)로 구현한 클래스의 객체 인스턴스(object instance)인지 아닌지를 확인할 때
         */
        interface Interface01{}
        class Class01{}
        class Class02 extends Class01 implements Interface01{}
        /* 어떤 클래스(class)에서 생성된 객체(object)인지를 확인할 때 */
        $var_01 = new Class01; // Class01 클래스 객체를 생성함.
        var_dump($var_01 instanceof Class01); // true
        var_dump($var_01 instanceof Class02); // false
        /* 부모 클래스(parent class)에서 상속받은 클래스인지를 확인할 때 */
        $var_02 = new Class02; // Class02 클래스 객체를 생성함.
        var_dump($var_02 instanceof Class01); // true
        var_dump($var_02 instanceof Class02); // true
        /* 클래스의 인스턴스(instance)인지 아닌지를 확인할 때 */
        $var_03 = new Class01; // Class01 클래스 객체를 생성함.
        var_dump(!($var_03 instanceof Class02)); // true
        /* 인터페이스(interface)로 구현한 클래스의 객체 인스턴스(object instance)인지 아닌지를 확인할 때 */
        $var_04 = new Class02; // Class02 클래스 객체를 생성함.
        var_dump($var_04 instanceof Class02); // true
        var_dump($var_04 instanceof Interface01); // true

// 제어문
    // 조건문
        // if
        /*
        if (조건식1) {
            조건식1의 결과가 참일 때 실행하고자 하는 명령문;
        }
        */
        // else
        /*
        if (조건식1) {
            조건식1의 결과가 참일 때 실행하고자 하는 명령문;
        }
        else {
            조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;
        }
        */
        // else if
        /*
        if (조건식1) {
            조건식1의 결과가 참일 때 실행하고자 하는 명령문;
        }
        else if (조건식2) {
            조건식2의 결과가 참일 때 실행하고자 하는 명령문;
        }
        else {
            조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;
        }
        */
        // switch
        /*
         * switch문은 if-else문과 마찬가지로 주어진 조건 값에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문
         * switch문은 if-else문보다 가독성 측면에서 더 좋다
         * 참고로 case절의 값은 일치 연산자(===)가 아닌 동등 연산자(==)를 사용하여 느슨하게 비교
         * 그리고 어떠한 case 절에도 해당하지 않을 경우 default 절이 실행
         * 각 case절 및 default 절은 반드시 break 키워드를 포함하고 있어야 함 (switch 탈출을 위해!)
         */
        /*
        switch (조건 값)
        {
            case 값1:
                조건 값이 값1일 때 실행하고자 하는 명령문;
                break;
            case 값2:
                조건 값이 값2일 때 실행하고자 하는 명령문;
                break;
            ...
            default:
                해당 case가 없을 때 실행하고자 하는 명령문;
                break;
        }
        */

    // 반복문
        // while
        /*
        while (조건식) {
            조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
        }
        */
        // for
        /*
        for (초기식; 조건식; 증감식) {
            조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
        }
        */
        // foreach
        /*
         * foreach문은 배열의 모든 요소를 손쉽게 순회할 수 있도록 해준다
         * 이 반복문은 루프마다 배열의 각 요소를 지정된 변수에 대입한다
         * 이렇게 대입받은 변수를 이용하면 루프 안에서 배열의 각 요소에 순차적으로 접근할 수 있다
         * 따라서 foreach문은 배열의 길이만큼 반복된다
        foreach (배열 as 값을 저장할 변수) {
            실행하고자 하는 명령문;
        }
        */
    // 기타
        // continue
        /*
         * continue문은 루프 내에서 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어감
         * 보통 반복문 내에서 특정 조건에 대한 처리를 제외하고자 할 때 사용된다
         */
        $var = 2;
        for ($i = 0; $i < 10; $i++) {
            if ($i % 2 == 0) // 짝수 제외
                continue;
            echo "{$i}<br/>";
        }
        // break
        $var = 2;
        $i = 0;
        $sum = 0;
        while (true) {
            if ($i == $var)
                break;
            $sum += $i; $i++;
        }
        echo $sum;
        // goto
        /*
         * goto문은 프로그램의 흐름을 지정된 레이블로 무조건 변경하는 명령문
         * goto는 다른 제어문과 다르게 아무 조건 없이 제어를 옮겨주기 때문에, 프로그램 흐름을 매우 복잡하게 만들 수도 있다
         * 이러한 단점으로 인해 현재는 거의 사용하지 않는다
         */
?>
</body>
Comment