중괄호 PHP의 변수. PHP 운영자. 문자열을 숫자로 변환




안녕하세요, 초보 프로그래머 여러분. 구성요소를 계속해서 연구해 봅시다.

이번 글에서는 PHP 연산자가 무엇인지 알아보겠습니다. 사실, 우리는 거의 어린 시절부터 그 중 일부에 익숙했지만 기호(+, -, =, !, ?)로만 알고 있습니다.

PHP에서는 그것들을 모두 연산자라고 부르는데, 이는 특정한 동작이나 작업을 수행하기 때문에 매우 논리적입니다.

문자나 숫자가 아닌 인쇄 가능한 모든 문자는 PHP의 연산자라고 말할 수도 있습니다. 하지만 그것이 전부는 아닙니다. 문자로 구성된 연산자가 있기 때문입니다.

순서대로 시작합시다.

산술 연산자

산술 연산자는 숫자에 대한 연산을 수행하는 데 사용됩니다.

+는 덧셈 연산자입니다.
— — 빼기 연산자;
/는 나누기 연산자입니다.
* — 곱셈 연산자;
%는 나누기 중 나머지를 구하는 연산자입니다.
++ — 1씩 증가하는 연산자(증분);
— — — 한 연산자만큼 감소(감소)

글을 쓸 때 일반적으로 연산자 앞뒤에 공백이 배치됩니다. 이는 단지 코드를 쉽게 읽을 수 있도록 하기 위한 것입니다. 하지만 이 공간은 아무 영향도 미치지 않으며 원할 경우 이 공간 없이도 가능합니다.

복소수식은 산술에서 허용되는 규칙에 따라 구성됩니다. 즉, 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선하며, 둘 다 표현식에 존재할 경우 후자를 괄호로 묶습니다.

에코 (6 + 7 ) * (7 + 8 ); // 195
?>

정수를 정수로 나누는 동작을 수행할 때 나머지를 구하는 경우 그 결과가 자동으로 실수(부동소수점 수)로 변환됩니다.

에코 8/3 ; //2.66666666666
?>

분수에 표시되는 자릿수는 php.ini 파일에 있는 정밀도 지시문에 설정된 값에 따라 다릅니다. 일반적으로 마침표를 제외하고 12자입니다.

% 연산자는 일반적으로 한 숫자가 나머지 없이 다른 숫자로 나누어지는지 여부를 확인하는 데 사용됩니다.

에코 53328% 4; //0
?>

증가 및 감소를 제외한 산술 연산자를 사용하는 연산을 호출합니다. 바이너리, 두 개의 피연산자(항 + 항, 피제수/제수 등)를 포함하기 때문입니다.

증가 및 감소 동작을 호출합니다. 단항, 하나의 피연산자를 포함하기 때문입니다. 좀 더 있나요 조건부 연산, 여기에는 세 개의 피연산자가 포함됩니다.

증가(++) 및 감소(- -) 연산자는 변수에만 적용됩니다.

변수형 정수(정수)

$다음 = 3 ;
에코 +$다음; // 4
?>

변수 유형 문자열

$next = "abc";
에코 $next; // abd
?>

문자 "c" 대신 문자 "d"가 인쇄되는 이유는 문자 "c"가 알파벳에서 다음이고 변수 값을 1 증가시켰기 때문입니다.

예제에서는 증가하는 작업을 보여 주며, 동일한 방식으로 감소하는 작업을 수행할 수 있습니다.

비트 연산자

비트 연산자는 이진 데이터를 사용하도록 설계되었습니다. 그것이 무엇인지 모르는 사람이 있으면 설명하겠습니다. 이진수는 1001000011100000111000과 같은 숫자입니다.

이러한 데이터는 웹 사이트 개발에 거의 사용되지 않으므로 자세히 설명하지 않겠습니다. 그런 기호를 만났을 때 무엇을 다루고 있는지 상상할 수 있도록 그것들이 어떻게 생겼는지 보여 드리겠습니다.

& - 비트 연결 AND (and);
~ — 비트 부정(not);
| — 비트 단위 합집합 OR(또는);
^ — 비트별 OR(xor);
<< — сдвиг влево битового значения операнда;
>> — 피연산자의 비트 값을 오른쪽으로 이동합니다.

이진 데이터는 컴퓨터 그래픽 프로그램 개발에 널리 사용되므로 이러한 연산자를 접할 가능성이 높습니다. 그러나 이를 연구하기 위해 누군가 필요한 경우 다른 리소스에 대한 별도의 과정을 수강해야 합니다.

비교 연산자

비교 연산자는 논리 연산자이며 변수를 비교하는 데 사용됩니다. 배열과 객체는 이를 사용하여 비교할 수 없습니다.

> -보다 큰 연산자;
=> - 크거나 같음 연산자;
< — оператор меньше;
<= — оператор меньше или равно;
== — 항등 연산자;
!= — 불평등 연산자;
=== — 등가 연산자(변수의 값과 유형이 동일함)
!== — 비동등 연산자;

비교 결과, true에 해당하는 값이 화면에 표시되거나 false에 해당하는 빈 문자열이 표시됩니다.

에코 1 > 0; // 1
에코 1< 0 ; // пустая строка
에코 1 => 0 ; // 1
에코 1 == 1 ; // 1
?>

따라서 비교 연산자 자체는 거의 사용되지 않습니다. 주요 목적은 if 문과 함께 작동하는 것입니다.

조건문 if, else, elseif.

조건부 연산자는 특정 작업이 수행되는 방식에 따라 특정 조건을 테스트하도록 설계되었기 때문에 그렇게 불립니다.

if 문은 부울 변수 또는 표현식을 인수로 사용합니다. 조건이 true이면 결과가 표시되고, true가 아니면 빈 줄이 표시됩니다.



if ($다음< $nexT)
{
echo "강수 확률"; // 강수량 출력 가능
}
?>

$next = "공기습도 80%";
$nexT = "공기습도 90%";
if ($next > $nexT)
{
echo "강수 확률"; // 빈 줄을 인쇄합니다.
}
?>

프로그램이 두 가지 작업을 지정해야 하는 경우, 그 중 하나는 값이 true이면 수행되고 다른 하나는 값이 false이면 if 문과 함께 else 문이 사용됩니다.

$next = "공기습도 80%";
$nexT = "공기습도 90%";
if ($next > $nexT)
{
echo "강수 확률";
}
또 다른
{
echo "강수량이 예상되지 않습니다";
}
?>

이 경우 “강수량은 예상되지 않습니다”가 표시되고, 표현에서 “More” 기호를 “Less”로 변경하면 “강수량 가능합니다”가 표시됩니다. 조건 연산자가 조건을 확인하고 그에 따라 올바른 결과를 출력하는 방법입니다.

2개 이상의 조건을 설정해야 하는 경우가 종종 있으며, 이를 순차적으로 확인하기 위해 elseif 연산자를 사용합니다.



if ($next > $nexT)
{
echo "알겠습니다";
}
elseif($다음<= $nexT)
{
에코 "눈";
}
elseif($next >= $nexT)
{
에코 "비";
}
elseif($next == $nexT)
{
echo "가뭄";
}
또 다른
{
echo "강수 확률";
}
?>

이 프로그램은 "Snow"를 출력합니다. 일치하는 조건이 없으면 "강수 확률"이 표시됩니다.

if 문에는 elseif 블록을 원하는 만큼 포함할 수 있지만 else 문은 하나만 포함할 수 있습니다.

중괄호 없이 대체 녹음 옵션이 허용됩니다. 이 경우 if, else, elseif 문의 줄은 콜론으로 끝나고 전체 구성은 키워드(연산자) endif로 끝납니다.

$next = "공기습도 50%";
$nexT = "공기습도 60%";
if ($다음<= $nexT):

에코 "눈";

elseif($next >= $nexT):

에코 "비";

elseif($next == $nexT):

echo "가뭄";

또 다른:

echo "강수 확률";
종료 ;
?>

논리 연산자

논리 연산자는 비트 연산자와 유사합니다. 차이점은 전자는 논리 변수로 작동하고 후자는 숫자로 작동한다는 것입니다.

논리 연산자는 여러 조건을 결합해야 하는 경우에 사용됩니다. 그러면 if 문 수가 줄어들고 결과적으로 코드 오류 가능성이 줄어듭니다.

&& - 연결 접속사 AND;
및 - 또한 AND이지만 우선순위가 낮습니다.
|| - 접속사 OR 분리;
또는 - OR이기도 하지만 우선순위가 낮습니다.
xor - 배타적 OR;
! - 거부;

우선순위가 낮다는 것은 두 연산자가 모두 존재할 경우 우선순위가 높은 연산자가 먼저 실행된다는 의미입니다.

앞으로는 더 복잡한 스크립트의 예를 사용하여 논리 연산자에 대해 더 자세히 설명하겠습니다.

할당 연산자

할당 연산자 =는 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다.

$next = "안녕하세요"
echo "안녕하세요" // 안녕하세요
?>

연산자 점

점 연산자는 숫자의 정수 부분과 분수 부분을 분리하고 여러 문자열과 숫자를 하나의 전체 문자열로 결합합니다.

$다음 = 22 ;
echo "오늘 이후" .$next. "서리가 예상됩니다"; // 오늘 22시 이후 서리가 내릴 것으로 예상됩니다.
?>

괄호 연산자

수학에서와 마찬가지로 괄호 연산자는 그 안에 포함된 작업에 우선순위를 부여합니다.

괄호 안의 데이터가 먼저 실행되고 나머지는 모두 실행됩니다.

중괄호 연산자

PHP에는 중괄호를 배치하는 세 가지 방법 또는 스타일이 있습니다.

1. BSD 스타일 - 괄호가 왼쪽으로 정렬됩니다.

만약 ($다음)
{

}

2. GNU 스타일 - 대괄호는 왼쪽 가장자리에서 들여쓰기되어 정렬됩니다.

만약 ($다음)
{
echo “초보 프로그래머 여러분, 안녕하세요”;
}

3. K&R 스타일 - 연산자 줄에 괄호가 열립니다.

if ($다음)(
echo “초보 프로그래머 여러분, 안녕하세요”;
}

처음부터 스타일 중 하나를 선택해야 하며 앞으로 스크립트를 작성할 때는 해당 스타일만 사용하세요. 게다가 어떤 스타일을 선호하는지는 전혀 중요하지 않습니다. 프로그램 전반에 걸쳐 통일성을 갖는 것이 중요합니다.

지금은 충분하다고 생각합니다. 원칙적으로 기호뿐만 아니라 함수, 기타 요소도 연산자가 될 수 있으므로 이를 모두 나열하는 것은 매우 어렵고 의미가 없습니다.

기본적인 기본 사항에 대한 아이디어가 있으면 충분합니다. 그리고 나머지는 실제 사례를 통해 분석하겠습니다.

한 아일랜드인이 눈물을 흘리며 셰레메티예보 공항 주변을 배회하고 있다. 직원 중 한 명이 다음과 같이 동정하기로 결정했습니다.
— 고향이 그리워요?
- 별말씀을요. 방금 짐을 다 잃어버렸어요
- 어떻게 이런 일이 일어날 수 있죠?
-나도 이해가 안 돼요. 플러그를 제대로 꽂은 것 같군요

$GLOBALS 변수. 현재 정의된 모든 스크립트 전역 범위 변수에 대한 참조를 포함하는 연관 배열입니다. 변수 이름은 배열 키입니다.

전역 변수를 선언하려면 $GLOBALS 배열에 넣으세요.

$GLOBALS["testkey2"]="테스트값2";

print_r($GLOBALS)를 사용하여 $GLOBALS 배열 변수의 모든 값을 표시할 수 있습니다. 또는 다음과 같습니다:

Foreach($GLOBALS as $key=>$value) echo "GLOBALS[".$key."] == ".$value."
";

$_SERVER 변수.

    $_REQUEST 변수- 기본적으로 $_GET, $_POST 및 $_COOKIE 변수의 데이터를 포함하는 연관 배열(배열)입니다. $_REQUEST 배열의 변수는 GET, POST 또는 COOKIE 메소드를 사용하여 스크립트에 전달되므로 신뢰할 수 없습니다. 원격 사용자가 변경했을 수 있습니다. 해당 배열의 존재 여부와 데이터가 해당 배열에 추가되는 순서는 Variable_order 지시문에 의해 결정됩니다(GPCS는 기본적으로 설정됨).

    $_SESSION 변수

    $_ENV 변수. 스크립트가 명령줄에서 시작된 경우 채워집니다. $_SERVER 배열에는 $_ENV 배열의 모든 변수가 포함됩니다.

    $http_response_header 변수

지난 포스팅에서 우리는 PHP의 조건문 구문을 살펴보았습니다. 이번 노트에서는 연산자 괄호에 대해 이야기하겠습니다. 당신은 끊임없이 그들을 만날 것입니다. 이는 모든 프로그래밍 언어의 기본 개념입니다.

Wikipedia는 연산자 대괄호가 무엇인지에 대한 질문에 답하는 데 도움이 됩니다.

연산자 괄호- 하나의 전체, 하나의 명령으로 인식되는 프로그래밍 언어의 명령 블록을 정의하는 대괄호 또는 명령.

Pascal은 다음 구성을 사용하여 연산자 대괄호를 나타냅니다. 시작하다…. 끝. C와 유사한 언어(포함 PHP), 연산자 대괄호는 기호를 사용하여 설명됩니다. {…} .

저것들. 즉, 연산자 대괄호로 묶인 여러 명령은 하나의 명령으로 처리됩니다.

PHP의 조건에 대한 기사에는 다음과 같은 예가 있습니다.

$b) ( echo "변수 A가 B보다 큼"; ) else ( echo "변수 B가 A보다 큼"; ) ?>

이 예에서는 연산자 대괄호가 2번 사용되었습니다. 그들은 운영자를 모함합니다

  • 에코"변수 A가 B보다 큽니다.";
  • 에코"변수 B가 A보다 큽니다.";

이 예에서는 괄호로 묶인 명령문이 1개뿐이므로 다음과 같이 작성하는 것과 동일합니다.

$b) echo "변수 A가 B보다 큽니다."; else echo "변수 B가 A보다 큽니다."; ?>

통사론:

If (조건) 표현식 1; 그렇지 않으면 표현식 2;

조건이 충족되지 않으면 화면에 다른 줄이 표시되기를 원한다고 가정해 보겠습니다. 이제 변수의 값도 변경해 보겠습니다. $a>이었다 $b. 코드를 수정해 보겠습니다.

$b) echo "변수 A가 B보다 큽니다."; else echo "변수 B가 A보다 큽니다."; echo "예..예 A는 실제로 B보다 작습니다."; ?>

해보자... 화면에서 무엇을 볼 수 있나요?

변수 A는 B보다 큽니다. 예..예 A는 실제로 B보다 작습니다.

여기 어딘가에 실수가 있습니다. 짐작하셨겠지만 요점은 조건이 참이므로(a > b) 코드가 실행된다는 것입니다.

Echo "변수 A가 B보다 큽니다.";

스레드에서 또 다른표현식은 1개뿐입니다:

Echo "변수 B가 A보다 큽니다.";

조건에 관계없이 다음 표현식이 실행됩니다. 이와 같이:

$b) echo "변수 A가 B보다 큽니다."; else echo "변수 B가 A보다 큽니다."; echo "예..예 A는 실제로 B보다 작습니다."; ?>

이제 연산자 대괄호를 사용하고 분기에서 2개의 표현식을 결합합니다. 또 다른:

$b) ( echo "변수 A는 B보다 큽니다."; ) else ( echo "변수 B는 A보다 큽니다."; echo "예..예 A는 실제로 B보다 작습니다."; ) ?>

코드가 훨씬 더 명확해졌습니다. 지금 PHP조건($a > $b)이 충족되지 않으면 2줄을 인쇄해야 한다는 것을 이해합니다. 그리고 조건이 참이면 하나만 가능합니다.

당신을 위한 나의 큰 것 조언– 여러 연산자를 하나의 블록으로 결합할 필요가 없더라도 항상 연산자 대괄호를 사용하십시오. 사실은 다음과 같습니다.

  • 이렇게 하면 코드를 더 쉽게 읽을 수 있습니다. 코드를 잠깐 살펴보면 문자와 숫자의 비네그레트가 아닌 개별 블록을 볼 수 있습니다.
  • 이전 코드를 변경해야 하는 경우가 많습니다. 연산자 대괄호가 없고 (우리의 경우처럼) 일부 코드를 추가했다면 프로그램 논리가 올바르지 않게 됩니다. 당장 눈치채지 못할 수도 있습니다.

문자열 보간용. 매뉴얼에서:

복잡한(곱슬) 구문

구문이 복잡하여 복잡한 표현식을 허용하므로 이를 복잡하다고 부르지 않습니다.

문자열 표현이 있는 모든 스칼라 변수, 배열 요소 또는 객체 속성은 이 구문을 통해 포함될 수 있습니다. 문자열 외부에서 식을 작성한 다음 ( 및 ) 로 감싸면 됩니다. ( 이스케이프할 수 없으므로 이 구문은 $ 가 ( . 리터럴 ($ 을 가져오려면 (\$ )을 사용하는 경우에만 인식됩니다. 명확하게 하기 위한 몇 가지 예:

width)00cm wide."; // 작동합니다. 인용된 키는 중괄호 구문을 통해서만 작동합니다. echo "이것은 작동합니다: ($arr["key"])"; // 작동합니다 echo "이것은 작동합니다: ($arr)" ; // 이는 $foo가 문자열 외부에서 잘못된 것과 같은 이유로 잘못된 것입니다. // 즉, 여전히 작동하지만 PHP가 먼저 foo라는 상수를 찾기 때문에 // 됩니다. / throw. echo "이것은 잘못되었습니다: ($arr)"; arr["foo"])"; // 작동합니다. echo "이것은 작동합니다: " . $arr["foo"]; echo "이것도 작동합니다: ( $obj->values->name)"; echo "이것은 $name이라는 이름의 var의 값입니다: ($($name))"; echo "이것은 getName(의 반환 값으로 명명된 var의 값입니다. ): ($(getName()))"; echo "이것은 \$object->getName()의 반환 값으로 명명된 var의 값입니다: ($($object->getName()))"; // 작동하지 않음, 출력: 이것은 getName()의 반환 값입니다: (getName()) echo "이것은 getName()의 반환 값입니다: (getName())"; ?>

종종 이 구문은 필요하지 않습니다. 예를 들면 다음과 같습니다.

$a = "abcd"; $out = "$a $a"; // "abcd abcd";

정확히 다음과 같이 동작합니다:

$out = "($a) ($a)"; // 같은

따라서 중괄호는 필요하지 않습니다. 하지만 이것은:

$out = "$aefgh";

오류 수준에 따라 $aefgh 라는 변수가 없기 때문에 작동하지 않거나 오류가 발생하므로 다음을 수행해야 합니다.

$out = "$(a)efgh"; // 또는 $out = "($a)efgh";

논평: 64비트 플랫폼의 PHP 7.0.0에서는 줄 길이에 대해 달성 가능한 제한이 없습니다. 32비트 시스템과 이전 버전의 PHP에서는 줄이 2GB(2147483647바이트)보다 클 수 없습니다.

통사론

문자열은 네 가지 방법으로 정의할 수 있습니다.

  • 작은따옴표
  • 큰따옴표
  • nowdoc 구문(PHP 5.3.0부터)

작은따옴표

문자열을 정의하는 가장 간단한 방법은 작은따옴표(기호)로 묶는 것입니다. " ).

문자열 내에서 작은따옴표를 사용하려면 백슬래시( \ ). 백슬래시 자체를 작성해야 하는 경우 이를 복제합니다( \\ ). 백슬래시의 다른 모든 사용은 일반 문자로 해석됩니다. 즉, 다음과 같은 다른 이스케이프 시퀀스를 사용하려고 하면 \아르 자형또는 \N, 특별한 동작 대신 있는 그대로 출력됩니다.

에코 "이것은 간단한 문자열입니다";

에코 "줄에 삽입할 수도 있습니다.
개행 문자는 다음과 같습니다.
이건 괜찮아"
;

// 출력: Arnold는 "나는 돌아올 것이다"라고 말한 적이 있습니다.
에코 "어느 날 Arnold는 '나는 돌아올 것이다'라고 말했습니다.";

에코 "C:\\*.*를 삭제하셨나요?";

// 출력: C:\*.*를 삭제하셨나요?
echo "C:\*.*를 삭제하셨나요?" ;

// 출력: 확장되지 않습니다. \n 새 줄
에코 "이것은 확장되지 않습니다: \n 개행";

// 출력: $expand 및 $either 변수는 확장되지 않습니다.
에코 "$expand 및 $either 변수는 확장되지 않습니다.";
?>

큰따옴표

문자열이 큰따옴표(")로 묶인 경우 PHP는 다음과 같은 특수 문자 이스케이프 시퀀스를 인식합니다.

이스케이프 시퀀스
후속 시퀀스 의미
\N 개행(ASCII에서는 LF 또는 0x0A(10))
\아르 자형 캐리지 리턴(CR 또는 ASCII의 0x0D(13))
\티 가로 탭(HT 또는 ASCII의 0x09(9))
\V 수직 탭(ASCII의 VT 또는 0x0B(11))(PHP 5.2.5부터)
\이자형 이스케이프 문자(ASCII의 ESC 또는 0x1B(27))(PHP 5.4.4부터)
\에프 페이지 피드(ASCII의 FF 또는 0x0C(12)) (PHP 5.2.5부터)
\\ 백슬래시
\$ 달러 표시
\" 큰따옴표
\{1,3} 바이트에 맞게 자동으로 오버플로되는 8진수 문자의 정규 표현식과 일치하는 문자 시퀀스(예: "\400" === "\000")
\x(1,2) 16진수 표기법으로 된 문자의 정규식에 해당하는 문자 시퀀스
\u(+) UTF-8 표현의 문자열에 매핑되는 유니코드 문자 정규식과 일치하는 문자 시퀀스(PHP 7.0.0에 추가됨)

작은따옴표로 묶인 문자열과 마찬가지로 문자를 이스케이프하면 이스케이프 문자 자체도 출력됩니다. PHP 5.1.1 이전에는 백슬래시를 사용했습니다. \($var)출판되지 않았습니다.

Heredoc

문자열을 정의하는 세 번째 방법은 heredoc 구문을 사용하는 것입니다. <<< . 이 연산자 뒤에는 식별자를 지정하고 줄 바꿈을 지정해야 합니다. 그 다음에는 줄 자체가 나오고 그 다음에는 동일한 식별자가 나타나 삽입을 닫습니다.

~ 해야 하다닫는 식별자로 시작합니다. 즉, 행의 첫 번째 열에 나타나야 합니다. 또한 식별자는 PHP의 다른 모든 태그와 동일한 명명 규칙을 따라야 합니다. 즉, 영숫자와 밑줄만 포함해야 하며 숫자로 시작해서는 안 됩니다(밑줄은 허용됨).

주목

닫는 식별자 줄에는 세미콜론( ; ). 즉, 아이디는 들여쓰기하면 안 된다세미콜론 앞이나 뒤에는 공백이나 탭이 있을 수 없습니다. 닫는 식별자 앞의 첫 번째 문자는 운영 체제에서 정의한 대로 개행 문자여야 한다는 점을 이해하는 것도 중요합니다. 예를 들어 macOS를 포함한 UNIX 시스템에서는 다음과 같습니다. \N. 새 줄은 닫는 식별자 바로 뒤에도 시작되어야 합니다.

이 규칙을 위반하고 닫는 식별자가 "깨끗"하지 않은 경우 닫는 식별자는 누락된 것으로 간주되며 PHP는 계속해서 이를 추가로 찾습니다. 이 경우 올바른 종료 식별자를 찾을 수 없으면 스크립트 끝에 줄 번호로 구문 분석 오류가 발생합니다.

예 #1 잘못된 구문의 예

클래스 foo(
공개 $bar =<<술집
EOT;
// 닫는 식별자 앞의 들여쓰기는 허용되지 않습니다.
}
?>

예 #2 올바른 구문의 예

클래스 foo(
공개 $bar =<<술집
EOT;
}
?>

Heredoc은 클래스 필드를 초기화하는 데 사용할 수 없습니다. PHP 5.3부터 이 제한은 변수를 포함하는 heredoc에만 적용됩니다.

Heredoc 텍스트는 큰따옴표가 없어도 문자열과 동일한 방식으로 동작합니다. 이는 heredoc에서 따옴표를 이스케이프 처리할 필요가 없지만 위의 이스케이프 시퀀스를 계속 사용할 수 있음을 의미합니다. 변수는 처리되지만 heredoc 내에서 복잡한 변수를 사용할 때는 문자열로 작업할 때만큼 주의해야 합니다.

예제 #3 Heredoc 문자열 정의 예제

$str =<<예시라인,
여러 줄에 걸쳐,
heredoc 구문을 사용합니다.
EOD;

클래스 foo
{
var $foo ;
var $bar ;

함수__구조()
{
$this -> foo = "푸" ;
$이것 ->
}
}

$foo = 새로운 foo();
$name = "이름" ;

에코<<내 이름은 "$name"입니다. $foo -> foo를 입력합니다. .
이제 나는 추론 중입니다.
( $foo -> 바 [ 1 ]) .
그러면 대문자 "A"가 출력됩니다: \x41
EOT;
?>

내 이름은 "이름"입니다. 저는 Foo를 입력합니다. 이제 Bar2를 출력합니다. 그러면 대문자 "A"가 출력됩니다: A

함수 인수를 통해 데이터를 전달하기 위해 heredoc 구문을 사용하는 것도 가능합니다:

버전 5.3.0부터 heredoc 구문을 사용하여 정적 변수 및 클래스 속성/상수를 초기화하는 것이 가능해졌습니다.

예제 #5 heredoc을 사용하여 정적 변수 초기화

// 정적 변수
함수 foo()
{
정적 $bar =<<여기에는 아무것도 없습니다...
상표;
}

// 상수/클래스 속성
클래스 foo
{
const 바 =<<상수 사용 예
푸바;

공개 $baz =<<필드 사용 예
푸바;
}
?>

PHP 5.3.0부터는 Heredoc 식별자를 큰따옴표로 묶을 수도 있습니다.

나우독

Nowdoc은 작은 따옴표로 묶인 문자열에 대해 heredoc이 큰 따옴표로 묶인 문자열에 대해 동일합니다. Nowdoc은 heredoc과 유사하지만 그 안에는 대체가 이루어지지 않습니다. 이 디자인은 이스케이프 처리 없이 PHP 코드나 기타 큰 텍스트 블록을 삽입하는 데 이상적입니다. 이는 SGML 구성과 약간 유사합니다. 처리할 의도가 없는 텍스트 블록을 선언합니다.

Nowdoc은 동일한 순서로 표시됩니다. <<< , heredoc에서 사용되지만 다음 식별자는 작은따옴표로 묶여 있습니다. 예를 들어, <<<"EOT" . heredoc 식별자에 적용되는 모든 조건은 nowdoc에도 적용되며, 특히 닫는 식별자에 적용되는 조건은 더욱 그렇습니다.

예 #7 nowdoc 사용 예

에코<<<"EOD"
예시 텍스트,
여러 줄에 걸쳐
nowdoc 구문을 사용합니다. 백슬래시는 항상 문자 그대로 처리됩니다.
예를 들어 \\ 및 \"입니다.
EOD;

이 예제를 실행한 결과는 다음과 같습니다.

nowdoc 구문을 사용하여 여러 줄에 걸쳐 있는 텍스트의 예입니다. 백슬래시는 항상 문자 그대로 처리됩니다(예: \\ 및 \").

예제 #8 변수를 사용한 Nowdoc 문자열 인용 예제

/* 변수를 사용하는 더 복잡한 예입니다. */
클래스 foo
{
공개 $foo ;
공개 $bar ;

함수__구조()
{
$this -> foo = "푸" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = 새로운 foo();
$name = "이름" ;

에코<<<"EOT"
내 이름은 "$name"입니다. $foo->foo를 인쇄합니다.
이제 ($foo->bar)를 인쇄합니다.
대문자 "A"를 출력해서는 안 됩니다. \x41
EOT;
?>

이 예제를 실행한 결과는 다음과 같습니다.

내 이름은 "$name"입니다. $foo->foo를 인쇄합니다. 이제 ($foo->bar)를 인쇄합니다. 대문자 "A"를 출력해서는 안 됩니다. \x41

예 #9 정적 데이터 사용 예

클래스 foo(
공개 $bar =<<<"EOT"
술집
EOT;
}
?>

논평:

nowdoc 지원은 PHP 5.3.0에 추가되었습니다.

변수 처리

문자열이 큰따옴표로 지정되거나 heredoc를 사용하여 지정되면 그 안의 변수가 처리됩니다.

구문에는 단순형과 복합형의 두 가지 유형이 있습니다. 간단한 구문이 더 쉽고 편리합니다. 변수, 배열 값( 정렬) 또는 객체 속성( 물체) 최소한의 노력으로.

복잡한 구문은 표현식을 묶는 중괄호로 식별할 수 있습니다.

간단한 구문

통역사가 달러 기호( $ ), 유효한 변수 이름을 형성하기 위해 가능한 한 많은 문자를 캡처합니다. 이름의 끝을 지정하려면 변수 이름을 중괄호로 묶습니다.

$juice = "사과" ;

echo "그는 $juice 주스를 마셨어요." . PHP_EOL ;

// 잘못된. "s"는 변수 이름에 유효한 문자이지만 변수 이름은 $juice입니다.
echo "그는 $juices로 만든 주스를 마셨습니다." ;

// 옳은. 변수 이름의 끝은 대괄호를 사용하여 엄격하게 표시됩니다.
echo "그는 $( juice ) 로 만든 주스를 마셨습니다." ;
?>

이 예제를 실행한 결과는 다음과 같습니다.

그는 사과 주스를 조금 마셨다. 그는 로 만든 주스를 마셨다. 그는 사과로 만든 주스를 마셨다.

배열 요소( 정렬) 또는 객체 속성( 물체). 배열 인덱스에는 닫는 대괄호( ] )는 인덱스 정의의 끝을 표시합니다. 단순 변수와 동일한 규칙이 객체 속성에 적용됩니다.

예제 #10 간단한 구문 예제

정의("KOOLAID", "koolaid1");
$juices = array("apple" , "orange" , "koolaid1" => "purple" );

echo "그는 $juices [ 0 ] 주스를 마셨습니다." . PHP_EOL ;
echo "그는 $juices [ 1 ] 주스를 마셨습니다." . PHP_EOL ;
echo "그는 $juices [ koolaid1 ] 주스를 마셨습니다." . PHP_EOL ;

클래스 사람들 (
공개 $john = "존 스미스" ;
공개 $jane = "제인 스미스" ;
public $robert = "로버트 폴슨" ;

공개 $smith = "스미스" ;
}

$사람 = 새로운 사람();

echo "$people -> John은 $juices [ 0 ] 주스를 마셨습니다." . PHP_EOL ;
echo " $people -> john이 $people -> jane에게 인사했습니다." . PHP_EOL ;
echo "$people -> john "의 아내가 $people -> robert에게 인사했습니다." . PHP_EOL;
echo " $people -> 로버트가 $people -> 대장장이 두 명에게 인사를 했습니다." ; // 작동하지 않습니다
?>

이 예제를 실행한 결과는 다음과 같습니다.

그는 사과 주스를 조금 마셨다. 그는 오렌지 주스를 마셨다. 그는 보라색 주스를 마셨다. John Smith는 사과 주스를 마셨습니다. John Smith는 Jane Smith에게 인사를 했습니다. John Smith의 아내가 Robert Paulsen에게 인사했습니다. Robert Paulsen이 두 사람에게 인사했습니다.

PHP 7.1.0에 지원 추가 부정적인숫자 인덱스.

예제 #11 음수 인덱스

$string = "문자열" ;
에코 "인덱스 -2의 문자는 다음과 같습니다.$string [- 2 ] ." , PHP_EOL ;
$string [- 3 ] = "o" ;
에코 "-3 위치의 문자를 'o'로 변경하면 다음 줄이 생성됩니다.$string." , PHP_EOL;
?>

이 예제를 실행한 결과는 다음과 같습니다.

인덱스가 -2인 문자는 n과 같습니다. 위치 -3의 문자를 "o"로 변경하면 다음 줄이 제공됩니다.

더 복잡한 경우에는 복잡한 구문을 사용하세요.

복잡한(곱슬) 구문

이해하기 어려워서가 아니라 복잡한 표현을 사용할 수 있게 해주기 때문에 복잡하다고 합니다.

문자열에 매핑된 모든 스칼라 변수, 배열 요소 또는 객체 속성은 이 구문을 사용하여 문자열로 표현할 수 있습니다. 줄 바깥에서와 같은 방식으로 표현식을 작성한 다음 줄 바꿈하면 됩니다. { 그리고 } . 왜냐하면 { 이스케이프할 수 없습니다. 이 구문은 다음 경우에만 인식됩니다. $ 직접 따르다 { . 사용 {\$ 인쇄하다 {$ . 몇 가지 예시:

// 모든 오류 표시
error_reporting(E_ALL);

$great = "훌륭함" ;

// 작동하지 않음, 출력: 이것은 (훌륭합니다)
echo "이것은 ( $great )" ;

// 작동, 출력: 훌륭해요
echo "이것은 ( $great ) " ;

// 작동
에코 "이 광장은 넓다.( $square -> 너비 ) 00cm." ;

// 작동합니다. 인용된 키워드는 중괄호 구문에서만 작동합니다.
echo "이것은 작동합니다: ( $arr [ "key" ]) " ;

// 작동
echo "이것은 작동합니다: ( $arr [ 4 ][ 3 ]) " ;

// 외부의 $foo와 같은 이유로 유효하지 않습니다.
// 라인. 즉, 여전히 작동합니다.
// 그러나 PHP는 상수 foo를 먼저 찾기 때문에
// 레벨 오류 E_NOTICE(정의되지 않은 상수).
에코 "그것은 옳지 않다:( $arr [ foo ][ 3 ]) " ;

// 작동합니다. 내부적으로 다차원 배열을 사용하는 경우
// 줄은 항상 중괄호를 사용합니다.
echo "이것은 작동합니다: ( $arr [ "foo" ][ 3 ]) " ;

// 작동합니다.
echo "이것은 작동합니다: " . $arr [ "foo" ][ 3 ];

에코 "이것도 작동합니다.( $obj -> 값 ​​[ 3 ]-> 이름 ) " ;

에코 "이것은 이름이 지정된 변수의 값입니다.$이름 : ($( $이름 )) " ;

에코 "이것은 getName() 함수에서 반환된 이름의 변수 값입니다.($( getName ())) " ;

에코 "이것은 \$object->getName()이 반환하는 이름별 변수 값입니다.($( $object -> getName ())) " ;

// 작동하지 않음, 출력: getName()이 반환하는 것: (getName())
에코 "이것은 getName()이 반환하는 것입니다: (getName())";
?>

이 구문을 사용하여 문자열 내의 개체 속성에 액세스하는 것도 가능합니다.

클래스 foo(
var $bar = "나는 바입니다." ;
}

$foo = 새로운 foo();
$bar = "바" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo ->( $baz [ 1 ])) \n" ;
?>

이 예제를 실행한 결과는 다음과 같습니다.

나는 바입니다. 나는 바입니다.

논평:

함수, 메서드 호출, 정적 클래스 변수 및 클래스 상수는 내부적으로 작동합니다. {$} , PHP 5부터. 그러나 제공된 값은 해당 값이 정의된 행과 동일한 컨텍스트에서 변수 이름으로 처리됩니다. 단일 중괄호 사용( {} )은 함수, 메소드, 클래스 상수 또는 정적 클래스 변수의 값에 액세스하는 데 작동하지 않습니다.

// 모든 오류 표시
error_reporting(E_ALL);

클래스 맥주 (
const 소프트드링크 = "루트비어" ;
공개 정적 $ale = "ipa" ;
}

$rootbeer = "A & W" ;
$ipa = "알렉산더 키스\"s" ;

// 작동하고 출력: A & W를 원합니다.
echo "($( 맥주 :: 소프트드링크 )) \n" ;

// 이것도 작동합니다. 출력: Alexander Keith의 것을 원합니다.
echo "($( 맥주 :: $ale )) \n" ;
?>

문자열의 문자 액세스 및 변경

문자열의 문자는 문자열 뒤의 대괄호 안에 0부터 시작하여 문자열 시작 부분의 오프셋을 지정하여 사용하고 수정할 수 있습니다(예: $str ). 이 목적을 위해 문자열을 문자 배열로 생각하십시오. 2개 이상의 문자를 가져오거나 바꿔야 하는 경우 다음 기능을 사용할 수 있습니다. 하위 문자열()그리고 하위 문자열 교체().

논평: PHP 7.1.0부터 음수 오프셋 값을 지원합니다. 줄 끝에서부터의 오프셋을 지정합니다. 이전에는 음수 오프셋으로 인해 레벨 오류가 발생했습니다. E_공지사항읽을 때(빈 문자열 반환) 또는 E_경고쓸 때 (행을 변경하지 않고 그대로 둡니다).

논평: 문자열의 문자는 중괄호를 사용하여 액세스할 수도 있습니다(예: $str(42) ).

주목

줄 경계를 넘어서는 오프셋에 쓰려고 하면 해당 오프셋까지의 공백으로 문자열이 채워집니다. 정수가 아닌 유형은 정수 유형으로 변환됩니다. 잘못된 오프셋 유형으로 인해 레벨 오류가 발생합니다. E_경고. 할당된 문자열의 첫 번째 문자만 사용됩니다. PHP 7.1.0부터 빈 문자열을 할당하면 치명적인 오류가 발생합니다. 이전에는 이 경우 0바이트(NULL)가 할당되었습니다.

주목

PHP의 문자열은 내부적으로 바이트 배열입니다. 결과적으로 오프셋에서 문자열에 액세스하거나 수정하는 것은 다중 바이트 인코딩에 안전하지 않으며 ISO-8859-1과 같은 단일 바이트 인코딩의 문자열에 대해서만 수행되어야 합니다.

논평: PHP 7.1.0부터 빈 인덱스를 사용하면 치명적인 오류가 발생했는데, 이 경우 경고 없이 문자열이 배열로 변환되었습니다.

예시 #12 몇 가지 예시 문자열

// 문자열의 첫 번째 문자를 가져옵니다.
$str = "이것은 테스트입니다." ;
$first = $str [ 0 ];

// 문자열의 세 번째 문자를 가져옵니다.
$세 번째 = $str [ 2 ];

// 문자열의 마지막 문자를 가져옵니다.
$str = "이것은 아직 테스트입니다." ;
$last = $str [ strlen ($str ) - 1 ];

// 줄의 마지막 문자를 변경합니다.
$str = "바다를 보세요" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

PHP 5.4부터 문자열의 오프셋은 정수 또는 숫자가 포함된 문자열로 지정되어야 합니다. 그렇지 않으면 경고가 발생합니다. 이전에는 다음과 같은 문자열로 오프셋이 제공되었습니다. "푸", 예고 없이 다음과 같이 변형되었습니다. 0 .

예제 #13 PHP 5.3과 PHP 5.4의 차이점

$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str["1.0"]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str["1x"]);
var_dump (isset($str [ "1x" ]));
?>

PHP 5.3에서 이 예제를 실행한 결과는 다음과 같습니다.

문자열(1) "b" bool(true) 문자열(1) "b" bool(true) 문자열(1) "a" bool(true) 문자열(1) "b" bool(true)

PHP 5.4에서 이 예제를 실행한 결과는 다음과 같습니다.

string(1) "b" bool(true) 경고: 7행의 /tmp/t.php에 잘못된 문자열 오프셋 "1.0"이 있습니다. string(1) "b" bool(false) 경고: /에 잘못된 문자열 오프셋 "x"가 있습니다. 9번째 줄의 tmp/t.php string(1) "a" bool(false) string(1) "b" bool(false)

논평:

다음을 사용하여 다른 유형의 변수(특정 인터페이스를 구현하는 배열이나 객체 제외)에 액세스하려고 합니다. 또는 {} 조용히 돌아올 것이다 없는.

논평:

PHP 5.5에는 구문을 사용하여 문자열 리터럴의 문자에 액세스하는 지원이 추가되었습니다. 또는 {} .

문자열을 수정하는 데 유용한 함수가 많이 있습니다.

기본 함수는 문자열 함수 섹션에 설명되어 있으며, 고급 검색 및 바꾸기의 경우 Perl 호환 정규식 함수에 대해 설명되어 있습니다.

문자열로 변환

캐스트를 사용하여 값을 문자열로 변환할 수 있습니다. (끈), 또는 함수 strval(). 문자열이 필요한 표현식에서는 변환이 자동으로 발생합니다. 함수를 사용할 때 이런 일이 발생합니다. 에코또는 인쇄, 또는 변수 값을 문자열과 비교할 때. 매뉴얼의 유형 및 유형 조작 섹션을 읽으면 다음 내용이 더 명확해집니다. 또한보십시오 세트타입().

배열은 항상 문자열로 변환됩니다. "정렬"이므로 배열의 내용을 표시할 수 없습니다( 정렬), 사용 에코또는 인쇄그 내용을 보려면. 단일 요소를 보려면 다음과 같은 것을 사용하십시오. 에코 $arr["foo"]. 모든 콘텐츠를 표시하고 보는 방법에 대한 팁은 아래를 참조하세요.

유형 변수를 변환하려면 "물체"유형에 매직 메소드 __toString이 사용됩니다.

의미 없는항상 빈 문자열로 변환됩니다.

위에서 볼 수 있듯이 배열, 객체, 리소스를 문자열로 직접 변환해도 해당 유형 외에 값 자체에 대한 유용한 정보는 제공되지 않습니다. 디버깅을 위해 값을 출력하는 더 좋은 방법은 함수를 사용하는 것입니다. print_r()그리고 var_dump().

PHP의 대부분의 값은 영구 저장을 위해 문자열로 변환될 수 있습니다. 이 방법을 직렬화라고 하며 다음 함수를 사용하여 수행할 수 있습니다. 직렬화().

문자열을 숫자로 변환

문자열이 숫자값으로 인식되면 결과 값과 유형은 다음과 같이 결정됩니다.

문자열에 문자 ".", "e" 또는 "E"가 포함되어 있지 않고 숫자 값이 정수 범위(정의됨)에 속하는 경우 PHP_INT_MAX), 문자열은 정수( 정수). 다른 모든 경우에는 부동 소수점 숫자로 간주됩니다( 뜨다).

값은 문자열의 시작 부분에 따라 결정됩니다. 행이 유효한 숫자 값으로 시작하면 해당 값이 사용됩니다. 그렇지 않으면 값은 0이 됩니다. 유효한 숫자 값은 하나 이상의 숫자(소수점을 포함할 수 있음)이며 선택적으로 앞에 기호가 오고 그 뒤에 선택적 지수가 옵니다. 지수는 "e" 또는 "E" 뒤에 하나 이상의 숫자가 옵니다.

$foo = 1 + "10.5" ; // $foo는 부동 소수점입니다(11.5).
$foo = 1 + "-1.3e3" ; // $foo는 부동소수점(-1299)입니다.
$foo = 1 + "bob-1.3e3" ; // $foo는 정수입니다 (1)
$foo = 1 + "bob3" ; // $foo는 정수입니다 (1)
$foo = 1 + "작은 돼지 10마리" ; // $foo는 정수입니다(11).
$foo = 4 + "10.2 작은 돼지" ; // $foo는 부동 소수점입니다(14.2).
$foo = "돼지 10.0마리" + 1 ; // $foo는 부동 소수점입니다(11)
$foo = "10.0돼지" + 1.0; // $foo는 부동 소수점입니다(11)
?>

이 변환에 대한 자세한 내용은 Unix 설명서의 strtod(3) 섹션을 참조하세요.

이 섹션의 예제를 테스트하려면 해당 예제와 다음 줄을 복사하여 붙여넣고 어떤 일이 발생하는지 확인하세요.

echo "\$foo== $foo ; 유형: " . gettype($foo) . "
\N" ;
?>

문자를 정수로 변환하여 문자 코드를 얻을 것이라고 기대하지 마십시오(예를 들어 C에서 수행된 것처럼). 문자를 ASCII 코드로 변환하거나 그 반대로 변환하려면 다음 함수를 사용하십시오. 주문()그리고 문자().

문자열 유형 구현 세부정보

7년 전

문서에는 언급되어 있지 않지만 heredoc 끝에 있는 닫는 세미콜론은 실제로 실제 세미콜론으로 해석되므로 때로는 구문 오류가 발생합니다.

$foo =<<ABCD
끝;
?>

이는 다음을 수행하지 않습니다.

푸(<<ABCD
끝;
);
// 구문 오류, 예상치 못한 ";"
?>

세미콜론이 없어도 잘 작동합니다.

푸(<<ABCD

);
?>

3 년 전

C와 같은 char 배열과 같은 문자열을 사용할 수 있습니다.

$a = "문자열 배열 테스트";

var_dump($a);
// string(17) "문자열 배열 테스트"를 반환합니다.

var_dump($a);
// 문자열(1) "S"를 반환합니다.

// -- 배열 캐스트 사용 --
var_dump((배열) $a);
// array(1) 반환 ( => string(17) "문자열 배열 테스트")

var_dump((배열) $a);
// 문자열(17) "S"를 반환합니다.

노리히오리

1 년 전

$(예: 변수)로 시작하는 모든 단일 표현식은 복잡하더라도 큰따옴표로 묶인 문자열에 () 삽입될 수 있습니다.

Echo "표현식 ( $h -> q ()[ "x)" ]-> p (9 == 0 ? 17 : 42 )) "와 마찬가지로 구문 분석됩니다.. $h -> q ()[ "x)" ]-> p (9 == 0 ? 17 : 42) . "하다." ;

?>

2 년 전

둘 다 작동해야 합니다:(

수업 테스트(
공개 정적 $VAR = "정적" ;
공개 const VAR = "const" ;

공개 함수 sayHelloStatic()(
echo "안녕하세요: ( $this :: $VAR ) " ;
}

공개 함수 sayHelloConst() (
echo "안녕하세요: ( $this ::VAR) " ; //구문 분석 오류: 구문 오류, 예상치 못한 ")", "["가 필요함
}
}

$obj = 새로운 테스트();
$obj -> sayHelloStatic();
$obj -> sayHelloConst ();

14년 전

복잡한 구문을 사용하여 개체 속성과 개체 메서드의 값을 문자열 안에 넣을 수 있습니다. 예를 들어...
수업시험{
공공의
$one= 1 ;
공적 기능
() {
반품
2 ;
}
}
$test= 새로운시험();
에코
"푸{ $test-> 하나} 술집{ $test-> ()} " ;
?>
"foo 1 bar 2"가 출력됩니다.

하지만 네임스페이스의 모든 값에 대해 이 작업을 수행할 수는 없습니다. 복잡한 구문이 "$"를 찾기 때문에 클래스 상수와 정적 속성/메서드는 작동하지 않습니다.
수업시험{
const
하나= 1 ;
}
에코
"foo (테스트::ONE) 바";
?>
그러면 "foo (Test::one) bar"가 출력됩니다. 상수 및 정적 속성을 사용하려면 문자열을 분리해야 합니다.

6 년전

문자열의 선행 0은 (놀랍게도) 8진수로 처리되지 않습니다.
고려하다:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x는 $x이고, y는 $y입니다"; //"x는 123, y는 83"을 인쇄합니다.
다시 말해서:
* 소스 코드의 숫자 리터럴에서 앞에 오는 0은 "8진수"로 해석됩니다. strtol().
* 문자열(예: 사용자가 제출한 데이터)의 앞에 오는 0은 (암시적 또는 명시적으로) 정수로 변환될 때 무시되고 소수로 간주됩니다. c.f. strtod().

3 년 전

"문자열을 숫자로 변환"과 일치한다는 점에 유의하세요.

만약에 ("123abc"== 123 ) 에코"(intstr == int)가 true로 잘못 테스트되었습니다.";

// 한쪽이 숫자이기 때문에 문자열이 intstr에서 int로 잘못 변환되어 테스트 숫자와 일치합니다.

// if 및 switch 문(아마도 while 루프와 같은)과 같은 모든 조건문에 대해 참입니다!

// 이는 정수만 예상하고 테스트하는 동안 사용자 입력을 테스트/사용/저장할 때 큰 보안 위험이 될 수 있습니다.

// 유일한 수정 사항은 123이 "123"과 같은 문자열이므로 변환이 발생하지 않는 것 같습니다.

?>

10년 전

다음은 큰따옴표로 묶인 문자열과 heredocs에 상수 및 기타 함수 호출을 포함하여 중괄호 구문에 임의의 표현식을 포함할 수 있는 쉬운 방법입니다.

// 해킹 선언
기능_expr($v) (반품$v; }
$_expr= "_expr";

// 우리 놀이터
정의하다("qwe", "아스드");
정의하다("zxc", 5 );

$a= 3 ;
$b= 4 ;

기능 ($a, $b) (반품$a+ $b; }

//용법
에코"미리{ $_expr(1 + 2 )} 게시물\n"; // "pre 3 post" 출력
에코"미리{ $_expr(qwe)} 게시물\n"; // "pre asd post"를 출력합니다.
에코"미리{ $_expr(($a, $b)+ zxc* 2 )} 게시물\n"; // "pre 17 post"를 출력합니다.

// 일반 구문은 ($_expr(...))입니다.
?>

11년 전

마음을 저장하려면 날짜에 대한 이전 댓글을 읽지 마세요.)

두 문자열을 모두 숫자로 변환할 수 있는 경우(("$a" > "$b") 테스트) 결과 숫자가 사용되며, 그렇지 않으면 전체 문자열이 문자별로 비교됩니다.

var_dump("1.22" > "01.23" ); //부울(거짓)
var_dump("1.22.00" > "01.23.00" ); //부울(참)
var_dump("1-22-00" > "01-23-00" ); //부울(참)
var_dump((뜨다)"1.22.00" > (플로트)"01.23.00" ); //부울(거짓)
?>

2 년 전

정보가 최소한 PHP 사이트의 올바른 페이지에 표시되도록 이 주석을 추가하는 것이 도움이 될 것이라고 생각합니다.

연관 키와 함께 큰따옴표로 묶인 문자열을 사용하려는 경우 T_ENCAPSED_AND_WHITESPACE 오류가 발생할 수 있습니다. 어떤 사람들은 이것을 덜 분명한 오류 메시지 중 하나로 간주합니다.

다음과 같은 표현:

$과일=배열(
"ㅏ"=> "사과",
"비"=> "바나나",
//등
);

인쇄 "이것은$과일[ "ㅏ"]"; // T_ENCAPSED_AND_WHITESPACE
?>

확실히 산산조각이 날 것입니다.

다음과 같이 해결할 수 있습니다.

인쇄"이것은$과일[ ] " ; // 키 인용 해제
인쇄"이것은${ 과일[ "ㅏ"]} " ; // 복잡한 구문
인쇄"이것은{ $과일[ "ㅏ"]} " ; // 복잡한 구문 변형
?>

나는 마지막 변형이 더 자연스럽고 문자열 외부의 표현과 더 가깝기 때문에 개인적으로 선호합니다.

PHP가 표현식 내부의 작은 따옴표를 잘못 해석하는 이유는 (적어도 나에게는) 명확하지 않지만 따옴표가 값 문자열의 일부가 아니라는 사실과 관련이 있다고 생각합니다. 일단 문자열이 이미 구문 분석되고 있으면 따옴표만 방해가 돼...?