>백엔드 개발 >PHP 튜토리얼 >PHP 학습 가이드 - 7장

PHP 학습 가이드 - 7장

黄舟
黄舟원래의
2016-12-23 09:50:14913검색


제어 구조

이 장의 핵심 포인트

◆ 로직 테스트 구축 및 결합

◆ 분기 처리에 if 및 스위치 사용

◆ while 및 for 사용

◆ 페이지 실행을 종료하려면 Exit 및 die를 사용하십시오.

프로그램이 다른 실행을 결정할 수 없는 경우 상황에 따라 유용한 프로그램을 작성하는 것은 매우 어렵습니다. 간단히 말해서, 표시 변수를 출력하는 프로그램 코드의 동작은 특정 변수의 값에 따라 달라집니다. 프로그래머로서 우리는 다양한 작업을 사용하여 프로그램이 이벤트에 다르게 반응하도록 할 수 있습니다(외부 세계, 시간, 사용자에 따라). 입력 또는 데이터베이스 내용 등).

이런 종류의 프로그램 응답에는 "제어 구조"가 필요합니다. 이 구조는 다양한 상황에서 다른 프로그램 코드로 실행되어야 하는 명령을 제어할 수 있습니다. 이전 장에서는 if와 같은 제어 구조를 사용했지만 이에 대해 자세히 설명하지는 않았습니다. 이번 장에서는 PHP에서 제공하는 각 제어 구조를 소개하고 이들이 어떻게 작동하고 작동하는지 자세히 살펴보겠습니다.

숙련된 C 언어 프로그래머의 경우: PHP의 모든 기능 중에서 "control" 부분은 원래 C 언어에서 사용된 모든 구조를 여기서 사용할 수 있습니다. , 같은 방식으로 작동합니다. 숙련된 C 언어 프로그래머라면 건너뛰고 이 장의 마지막 부분을 직접 읽어도 됩니다.

우리가 논의할 두 가지 주요 제어 구조 유형은 분기와 루프입니다. 분기는 프로그램 실행 경로의 분기입니다. 특정 테스트에 따라 프로그램은 왼쪽 또는 오른쪽으로 진행하도록 선택할 수 있습니다. 후속 경로는 다를 수도 있고 다시 병합될 수도 있습니다. 루프(Loop)는 분기의 처음으로 돌아가는 실행 경로를 갖고 반복적으로 테스트하거나 루프 내에서 실행될 수 있는 분기 유형 중 하나입니다.

제어 구조를 효과적으로 활용하기 전에 먼저 테스트 조건을 효과적으로 구성할 수 있어야 합니다. 가장 간단한 테스트부터 시작하여 TRUE 및 FALSE 상수를 확인한 다음 이러한 테스트를 보다 복잡한 코드에서 사용합니다.

부울 연산자

이 장에 소개된 각 제어 구조는 두 가지 별개의 부분으로 구성됩니다. 하나는 테스트 부분(진행 방향 결정)이고 다른 하나는 테스트 코드(어느 쪽이든)입니다. 단일 분기 또는 루프)는 부울 연산 평가를 통해 테스트되며 "참" 또는 "참이 아님"의 판단은 연산 표현식의 결과입니다.

부울 상수

가장 간단한 연산 유형은 단순 값(단순 값)이고, 가장 간단한 부울 값은 TRUE 및 FALSE 상수이며, 그 반대도 마찬가지입니다. 예를 들어 if-else 문의 테스트 부분에 이를 포함할 수 있습니다.




if (TRUE)print(“This will Always print”); 이것은 인쇄되지 않습니다."); 위의 예는 다음과 정확히 동일합니다: if (FALSE) print ("이것은 인쇄되지 않습니다"); elseprint ("이것은 항상 인쇄됩니다");

논리 연산자

논리 연산자는 다른 논리(부울이라고도 함) 값을 결합하여 새로운 부울 값을 생성할 수 있습니다. PHP는 표준 논리 연산(and, or, not 및 xor)을 지원합니다. 처음 두 개는 표 7-1에 표시된 대로 대체 버전을 갖습니다.

7-1 논리연산기호

PHP 학습 가이드 - 7장

C 언어 프로그래머의 경우 "&&" 및 "||" 연산자에 익숙해야 합니다. "!" 연산자는 분명한 이유로 종종 "NOT"이라고 불립니다.

다음 표현식은 논리 연산자의 예입니다.

(($statement_1 && $statement_2)||

($statement_1 && ! $statement_2)||
(! $statement_1 && $statement_2)||

(! $statement_1 && ! $statement_2)|| 명시된 변수의 값에 관계없이 결과는 4가지입니다. 두 변수의 참값 중 각각은 "&&" 연산자로 표시됩니다. 왜냐하면 이 네 개 중 하나가 참이어야 하기 때문입니다.
xor 연산자를 사용합니다. 다음 예에서는 "동어항"을 더욱 기발하게 보여줍니다.

($statement_1 및 $statement_2 및

$statement_3) xor

((! $statement_2)) 또는

(! ( $statement_1 및 $statement_3)) 또는

(! ( $statement_2 및 $statement_3))))

의 의미 연산은 "세 개의 서술문이 주어지면 다음 두 가지 상황 중 하나만 발생할 수 있습니다. 1: non-ne의 세 가지 진술이 모두 참이면 참이 아닌 진술이 한 쌍이 됩니다."

논리 연산자

의 우선 순위는 다른 연산자와 동일합니다. 일부 논리 연산자는 다른 연산자보다 우선 순위가 높지만 괄호를 사용하여 우선 순위를 변경할 수도 있습니다. 다른 것보다 훨씬 낮으므로 연산자(=)를 지정하십시오. "and"는 "&&"보다 더 밀접하게 연결되지만 덜 엄격하게 연결됩니다.

연산자의 전체 목록과 우선순위에 대한 온라인 매뉴얼이 있습니다. .

논리 연산자의 단락

부울 연산자는 왼쪽에서 오른쪽으로 결합되고 첫 번째 인수가 다음과 같은 경우 "단락"으로 설계될 수 있다는 매우 편리한 기능을 가지고 있습니다. 예를 들어 두 숫자의 대략적인 비율을 결정하는 경우와 같이 제수가 0이 아닌 경우 0으로 나누는 오류를 피하기 위해 두 번째 인수를 전혀 진행할 필요가 없습니다. , "!="(같지 않음) 연산자를 사용하세요.

if ($denom != 0 && $numer/ $denome>2)

print( "2배 이상 much!");

$denom이 "0"인 경우 두 번째 연산이 true인지 false인지에 관계없이 "&&" 연산자는 "not true" 값을 반환해야 합니다. 단락 동작으로 인해 두 번째 표현식은 평가되지 않으므로 오류가 방지됩니다. $denom이 "0"이 아닌 경우 "&&" 연산자는 진실 결론에 도달할 만큼 충분한 정보를 갖고 있지 않으므로 두 번째 연산자가 평가됩니다.

지금까지 TRUE 및 FALSE 상수와 이를 결합하여 다른 true 및 false 값을 형성하는 방법에 대해 공식적으로 논의했습니다. 이제 실제 부울 산술 테스트를 수행하는 연산자를 살펴보겠습니다.

비교 연산자

표 7-2에는 숫자나 문자열에 사용할 수 있는 비교 연산자가 나와 있습니다. ("정수가 아닌 값에 주의하세요" 설명을 주의하세요)

표 7-2 비교 연산 기호


PHP 학습 가이드 - 7장


다음은 변수 지정의 몇 가지 예이며, 그 뒤에는 항상 참인 복합 테스트가 따릅니다.




$3 = 3; 3.14159;If (($3 = =$3) and($4 ===$4)and($3 !=$4)and($3=$there) and($3 $3) and($my_pi ”); elseprint (“정말로 입력하셨나요?
”):

매우 일반적인 실수에 유의하세요. 특정 연산자(=)와 비교 연산자(==)를 혼동하는 것입니다. "if($3 = $4).." 이 명령문은 실수로 $3 및 $4를 동등한 변수(유형)로 설정할 수 있습니다. $four가 true이면 테스트 결과가 true가 됩니다!

연산자 우선순위

우선순위에 너무 많이 의존하면 코드를 읽는 사람들이 혼란을 겪을 수 있지만 비교 연산자는 부울 연산자 개념보다 우선순위가 높다는 점에 유의하는 것이 좋습니다. 다음 예를 살펴보세요.

If ($small_num> 2 && $small_num
if에 필요한 두 개의 괄호를 제외하고는 더 이상 괄호가 필요하지 않습니다.

문자열 비교
비교 연산자는 문자열이나 숫자를 비교할 때 사용할 수 있습니다. ("상수가 아닌 숫자에 주의하세요" 설명을 주의하세요) 다음 프로그램 출력에 해당 예제가 표시되기를 원합니다.




if (("Marx"”);}
정수가 아닌 문자에 주의하세요.

비교 연산자는 다음을 수행할 수 있지만 숫자나 문자열을 연산할 때 다음 두 가지 문제에 주의해야 합니다.

우선, 배정밀도 부동소수점보다 작은 경우에는 배수(또는 정수와 배수)를 비교하는 것이 일반적으로 안전하지만, 배수의 동등성을 비교하는 것은 매우 어렵습니다. 특히 위험합니다. 수치 계산 결과를 비교할 때. 문제는 이론적으로 동일한 두 값이 약간씩 달라지는 '반올림 오류'입니다.

둘째, 비교 연산자는 숫자와 동일한 방식으로 문자열에 대해 비교 연산을 수행할 수 있지만 PHP는 자동으로 유형 변환을 수행하므로 때로는 문자열을 숫자로 해석할 수 있는 경우 결과가 잘못된 결과가 됩니다. 예를 들어 다음과 같습니다. 코드:




$strinhg_1 = “00008”; $string _2 = “007”; $string_3 = “00008-OK” ;If($string_2 "); If($string_3") ;If ($string_1 ”);

출력 결론은 다음과 같습니다.

007 is less than 00008 //숫자 비교

00008- OK는 007보다 작습니다. //문자열 비교

00008은 00008보다 작습니다.-OK//문자열 비교는 충돌을 일으킵니다.

가능하다면 PHP는 문자열을 숫자로 매개변수화합니다. 비교는 이런 방식으로 처리될 수 있으며 문자 대신 숫자로 비교됩니다. PHP4 디자이너는 이것을 버그가 아닌 기능으로 취급합니다. 우리의 관점에서는 비교 중에 문자열이 숫자로 변환될 수 있다면 strcmp() 함수를 사용하는 것이 더 좋습니다(10장 참조).

삼항 연산자

매우 유용한 구조는 부울 연산자와 "진실" 분기 구조 사이에서 역할을 하는 삼항 조건 연산자입니다. 해당 기능은 세 가지 작업을 수행하는 것입니다. 첫 번째 작업의 값은 다른 두 작업 중 필요한 작업을 결정하는 데 사용됩니다. 평가 후 해당 값이 반환됩니다. :

test-expression ?yes-expression:no-expression

test-expression이 true이면 이 연산자의 값은 yes-expression의 결과이고, 그렇지 않으면 no-expression 결과입니다.

예를 들어 다음 작업은 두 매개변수 중 어느 것이 더 큰지에 따라 $max_num을 $first_num 또는 $second_num으로 지정합니다.

$max_num = $first_num > :$second_num;

보시다시피 위의 설명은 다음과 같습니다.

if ($first_num >$second_num )

$max_num = $ first_num; 🎜>
else

$max_num = $second_num;

삼항 연산자를 사용하면 위의 예가 더 간결해집니다.

브랜치 구조

브랜치의 두 가지 주요 구조는 if와 switch.if가 가장 일반적으로 사용되는 메인 브랜치 선택이며, 일반적으로 누구나 먼저 배우는 조건부 구조입니다. 단일 값을 기반으로 여러 개의 가능한 분기가 필요한 경우 또는 일련의 if 문이 매우 번거로운 경우와 같이 일부 경우에는 Switch를 사용하는 것이 매우 적합합니다.

if – else 문

if 구문은 다음과 같습니다.

if(test)

statement-1

또는 선택적 else 분기를 가질 수도 있습니다:

if(test)

statement-1

else

statement- 2

if 문이 처리된 후 테스트 작업이 평가되고 결과가 부울 값으로 해석됩니다. 테스트가 true가 아니고 else 절이 없으면 if 구조 뒤의 다음 문이 실행됩니다.

구문의 "문"은 세미콜론으로 끝나는 단일 문일 수 있습니다. 그것은 큰 진술일 수도 있고, 괄호로 묶인 서술 블록일 수도 있고, 또 다른 조건부 구조(그 자체가 단일 서술로 볼 수 있음)일 수도 있습니다. 조건은 어떤 깊이로든 서로 중첩될 수 있습니다. 또한 부울 연산자는 실제 부울 값(예: TRUE, FALSE 또는 부울 연산자나 함수의 결과)이거나 부울 값으로 해석될 수 있는 다른 유형의 값일 수 있습니다.

볼린저 가치에 대한 자세한 내용은 6장을 참조하세요. 간단히 말해서, 숫자 "0", 문자열 ""0"" 및 빈 문자열 """은 false이고 다른 모든 값은 true입니다.

다음 예는 두 숫자 사이의 절대 차이를 출력합니다. 이는 중첩된 조건의 사용을 보여주고 테스트 결과를 부울 값으로 해석하는 방법도 언급합니다.





if ($first - $second)if ($first > $second){$difference = $first - $second;print(“차이는 $difference
” );}else{$difference = $second - $first;print("차이는 $difference
");}elseprint("차이는 없습니다
");

이 단락 코드는 숫자 "에 의존합니다. 0"은 참이 아닌 값으로 해석됩니다. 차이가 "0"이면 테스트가 실패하고 출력에 "차이 없음"이라는 메시지가 표시됩니다. 차이가 있는 경우 1단계 테스트가 수행됩니다(이 예에서는 "$first != $second" 와 같이 직접 쓰는 것이 앞의 예와 동일하고 이해하기 쉽기 때문에 일부러 만든 것입니다.

추가 else

이 시점에서 이전에 Pascal을 사용해 본 프로그래머라면 else 부분이 약간 이상하다는 것을 알 수 있습니다. 즉, else 절이 어느 부분에 속하는지 어떻게 알 수 있습니까? 에게? 규칙은 실제로 매우 간단하며 Pascal을 제외한 다른 모든 언어와 거의 동일합니다. 각각은 가장 가까운 것과 일치하며, 먼저 중괄호로 제한된 범위를 따릅니다. if 문이 독립적으로 유지되고 else와 일치할 필요가 없도록 하려면 다음과 같이 한 쌍의 큰 호로 묶을 수 있습니다.





if( $num % 2 = =0)//$num이 짝수인가요? {if ($num > 2)print("num이 소수가 아닙니다
"); elseprint("num이 홀수입니다
");

$num이 2보다 큰 짝수인 경우 , 그러면 코드는 "num이 소수가 아닙니다"를 인쇄하고 $num이 홀수이면 "num은 홀수입니다"를 인쇄하고 $num이 정확히 2이면 아무것도 인쇄하지 않습니다. 중괄호를 생략하면 else가 내부 if에 추가되므로 $num이 2와 같으면 코드는 "num is 홀수"를 잘못 인쇄합니다. $num이 실제로 홀수이면 코드는 아무것도 인쇄하지 않습니다.

이 장의 예에서는 12장에서 설명한 나머지 연산자(%)를 자주 사용합니다. 이러한 예에서 독자는 "$x % $y"가 "0"이라는 사실만 알면 됩니다. 즉 "$x는 $y로 나누어진다"는 의미입니다.

Elseif

다음 중첩 if 문과 같이 계단식 테스트를 수행하는 것이 매우 일반적입니다.





if ($day == 5)print(“금반지 5개
”); elseif ($day ==4)print(“네 마리의 부름새
”) elseif ($day ==3 )print (“프랑스 암탉 세 마리
”); elseif ($day ==2)print(“거북비둘기 견인
”; elseif ($day ==1)print(“배나무에 있는 자고새
" );


이 형식은 매우 일반적이며 이를 처리하기 위한 특별한 elseif 구조가 있습니다. 이전 예를 다음과 같이 다시 작성할 수 있습니다.
if ($day == 5)print(“금반지 5개
”); elseif($day == 4)print(“네 마리의 부름새
”) elseif($ day == 3 )print(“프랑스 암탉 세 마리
”); elseif($day == 2)print(“산비둘기 두 마리
”) elseif($day ==1)print(“배나무에 있는 자고새");

if, elseif... 구조를 사용하면 하나의 분기 테스트 표면이 성공한 경우에만 순차적으로 테스트를 수행할 수 있습니다. 이론적으로는 이전 예와 동일합니다(대신 5개의 분기가 있는 구조). 5개로 구성된 중첩된 분기 구조)는 구문적으로 다르지만 동작은 동일합니다.

분기 및 HTML 모드 <.>
이전 장에서 배웠습니다. PHP 태그를 사용하여 HTML 모드와 PHP 모드 사이를 자유롭게 전환할 수 있다는 점은 HTML 텍스트 블록에 영역을 포함해야 하고 동적 코드가 삽입되지 않은 경우 매우 편리합니다. 변수를 HTML 모드로 다시 전환하고 텍스트에 직접 포함하면 인쇄나 에코를 사용하여 보내는 것보다 더 간단하고 효율적입니다.

덜 분명한 것은 이 전략이 본질적으로 조건부 구조 내에서도 작동한다는 것입니다. 즉, PHP를 사용하여 어떤 HTML을 보낼지 결정한 다음 일시적으로 HTML 모드로 다시 전환하여 해당 HTML을 "전송"할 수 있습니다.

예를 들어, 다음 코드는 print 문을 사용하여 완전한 HTML 웹 페이지를 구성합니다(테스트하기 위해 female() 부울 함수를 가정합니다).










여성 전용 사이트
”);print(“”);print(“이 사이트는 특별히 제작되었습니다”);print ("여성 전용입니다.
여기에 남성은 허용되지 않습니다!");}Else{Print("TITLE>남성 전용 사이트
");print(" ”);




print(“이 사이트는 특별히 제작되었습니다.”);print(“남성 전용입니다. ");}?>이러한 모든 인쇄 구문을 피하고 두 분기 모두에서 내부적으로 HTML 코드를 사용할 수 있습니다. 예: 여성 전용 사이트이 사이트는 여성만을 위해 특별히 제작되었습니다.
여기에는 남성이 허용되지 않습니다!남성 전용 사이트
이 사이트는 남성 전용 사이트입니다.
여성은 출입할 수 없습니다! ;

이 버전은 읽기가 더 어렵지만 유일한 차이점은 각 인쇄 문이 PHP 오른쪽 태그(?>로 시작)로 대체된다는 것입니다. 그리고 PHP 왼쪽 태그(
)로 시작합니다. 이 책의 예제에서는 PHP 초보자가 이해하기 어렵기 때문에 이러한 유형의 조건문을 포함하지 않으려고 노력합니다. 그러나 이것이 독자의 학습을 방해하는 이유가 되어서는 안 됩니다. 이 방법은 빠른 실행을 포함하여 고유한 이점을 가지고 있습니다(HTML 모드에서 PHP 엔진이 해야 할 일은 문자를 전달하고 다음 PHP 왼쪽 표시를 기다리는 것뿐입니다. 특히 큰따옴표로 묶인 문자열이 포함된 경우 인쇄 문을 구문 분석한 다음 실행하는 것보다 확실히 빠릅니다.

스위치

특정 다방향 분기 유형의 경우 스위치 구조를 사용하는 것이 더 유용합니다. 스위치는 논리적 연산에 따라 분기하지 않고 단일 연산의 값에 따라 다른 경로를 선택합니다. Switch의 구문은 다음과 같습니다. 선택적 부분은 대괄호([])로 묶습니다.





switch(expression){case value -1:statement -2statement -2…[break;]case value-2:statement-3statement-4…[break;]…[default:default-statement]}

식은 변수이거나 다른 유형일 수 있습니다. 식은 다음과 같습니다. 단순한 값(정수, 배정밀도 부동 소수점 숫자 또는 문자열)으로 평가되는 한. 이 구조는 표현식을 평가한 다음 그 결과가 특정 조건부 값과 같은지 테스트하여 실행됩니다. 일치하는 값이 발견되면 특수 명령문 "break;"가 나올 때까지 또는 스위치 구조가 끝날 때까지 후속 명령문이 순서대로 실행됩니다(나중에 살펴보겠지만, break는 루프 구조에서 종료되고 종료될 수도 있습니다). 특별한 "default" 태그는 구조의 끝 부분에 사용될 수 있습니다. 이는 다른 조건과 일치하는 것이 없을 경우 표현식과 "일치하는" 섹션입니다.

예를 들어 if-else 예제를 다음과 같이 다시 작성할 수 있습니다.





switch($day){case 5:print (" 다섯 개의 금반지
"); break; case4:print("네 마리의 부름새
"); break; 사례 3:print("세 마리의 프랑스 암탉
"); break; 사례 2:print(" Tow TurtleDoves
");break;default:print("A 자고새 in a 배나무
");}


이 영어 가사 예시는 2~5에 나옵니다. 그 중 , 출력에는 해당 행이 표시되고 다른 날짜에는 "배나무의 자고새"가 인쇄됩니다.

Switch의 귀찮은 점은 실행을 중지하는 break 문이 나올 때까지 일치하는 사례 이후의 모든 사례가 실행된다는 것입니다. "partridge"의 예에서 break 문은 한 번에 한 줄의 가사만 표시되도록 합니다. break 문을 제거하면 여러 줄이 표시되는 것을 볼 수 있습니다.

루프

축하해요! 이제 스크립팅에서 "실제 프로그래밍"으로 넘어가는 단계에 이르렀습니다. 지금까지 살펴본 분기 구조는 유용하지만 이를 사용하여 수행할 수 있는 계산은 제한되어 있습니다. 반면에 평가 테스트와 무제한 루프가 있는 모든 언어는 컴퓨터 과학 이론에서 다른 어떤 언어보다 더 나은 성능을 발휘할 수 있다는 것이 매우 확실합니다. PHP에서 C 컴파일러를 작성할 필요는 없지만 그렇게 하는 것을 방해하는 고유한 언어 제한은 없다는 점을 명심하십시오.


위 내용은 PHP 학습 가이드 - Chapter 7의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www. php.cn)!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.