질문자 :Community Wiki
이게 뭔가요?
이것은 PHP의 구문에 대해 가끔씩 나오는 질문 모음입니다. 이것은 커뮤니티 위키이기도 하므로 모든 사람이 이 목록을 유지 관리하는 데 참여하도록 초대됩니다.
왜 이런거야?
이전에는 연산자 및 기타 구문 토큰에 대한 질문을 찾기가 어려웠습니다.¹
주요 아이디어는 스택 오버플로에 대한 기존 질문에 대한 링크를 갖는 것이므로 PHP 매뉴얼의 내용을 복사하지 않고 참조하기가 더 쉽습니다.
참고: 2013년 1월부터 스택 오버플로 는 특수 문자를 지원합니다 . 검색어를 따옴표로 묶으십시오(예: [php] "==" vs "==="
여기서 어떻게 해야 하나요?
그러한 질문을 했기 때문에 누군가가 여기를 지적했다면 아래에서 특정 구문을 찾으십시오. 그러면 링크된 질문과 함께 PHP 매뉴얼에 링크된 페이지가 귀하의 질문에 답할 것입니다. 그렇다면 답변에 찬성 투표를 하는 것이 좋습니다. 이 목록은 다른 사람들이 제공한 도움을 대체하기 위한 것이 아닙니다.
목록
특정 토큰이 아래에 나열되지 않은 경우 파서 토큰 목록 에서 찾을 수 있습니다.
&
비트 연산자 또는 참조
=&
참조
&=
비트 연산자
&&
논리 연산자
%
산술 연산자
!!
논리 연산자
@
오류 제어 연산자
?:
삼항 연산자
??
Null 병합 연산자 (PHP 7부터)
?string
?int
?array
?bool
?float
Nullable 반환 유형 선언 (PHP 7.1부터)
:
제어 구조에 대한 대체 구문 , 삼항 연산자 , 반환 유형 선언
::
범위 분해 연산자
\
네임스페이스
->
클래스와 객체
=>
배열
^
비트 연산자
>>
비트 연산자
<<
비트 연산자
<<<
Heredoc 또는 Nowdoc
=
할당 연산자
==
비교 연산자
===
비교 연산자
!==
비교 연산자
!=
비교 연산자
<>
비교 연산자
<=>
비교 연산자 (PHP 7.0부터)
|
비트 연산자
||
논리 연산자
~
비트 연산자
+
산술 연산자 , 배열 연산자
+=
및 -=
할당 연산자
++
및 --
증가/감소 연산자
.=
할당 연산자
.
문자열 연산자
,
함수 인수
,
변수 선언
$$
변수 변수
`
실행 연산자
<?=
짧은 열기 태그
[]
배열 (PHP 5.4 이후의 짧은 구문)
<?
열기 및 닫기 태그
...
인수 풀기 (PHP 5.6부터)
**
지수 (PHP 5.6부터)
#
한 줄 셸 스타일 주석
?->
NullSafe 연산자 호출 (PHP 8.0부터)
답변자 : Community Wiki
증가/감소 연산자
++
증가 연산자
--
감소 연산자
Example Name Effect --------------------------------------------------------------------- ++$a Pre-increment Increments $a by one, then returns $a. $a++ Post-increment Returns $a, then increments $a by one. --$a Pre-decrement Decrements $a by one, then returns $a. $a-- Post-decrement Returns $a, then decrements $a by one.
변수 앞이나 뒤에 올 수 있습니다.
변수 전에 넣어 경우, 증가 / 감소 작업은 먼저 결과가 반환되는 변수에 이루어집니다. 변수 뒤에 넣으면 변수가 먼저 반환되고 증가/감소 연산이 수행됩니다.
예를 들어:
$apples = 10; for ($i = 0; $i < 10; ++$i) { echo 'I have ' . $apples-- . " apples. I just ate one.\n"; }
라이브 예시
위의 경우 ++$i
가 더 빠르기 때문에 사용됩니다. $i++
는 동일한 결과를 가집니다.
사전 증가는 실제로 변수를 증가시키고 그 후에 결과를 '반환'하기 때문에 조금 더 빠릅니다. 사후 증가는 특수 변수를 만들고 첫 번째 변수의 값을 거기에 복사하고 첫 번째 변수가 사용된 후에만 해당 값을 두 번째 변수로 바꿉니다.
$apples--
를 사용해야 합니다. 먼저 현재 사과 수를 표시하고 나서 하나를 빼려고 하기 때문입니다.
PHP에서 문자를 증가시킬 수도 있습니다.
$i = "a"; while ($i < "c") { echo $i++; }
z
에 도달하면 aa가 다음 aa
문자 변수는 증가할 수 있지만 감소할 수 없으며 일반 ASCII 문자(az 및 AZ)만 지원됩니다.
스택 오버플로 게시물:
답변자 : Community Wiki
비트 연산자
비트는 무엇입니까? 비트는 1 또는 0을 나타냅니다. 기본적으로 OFF(0) 및 ON(1)
바이트란 무엇입니까? 바이트는 8비트로 구성되며 바이트의 가장 높은 값은 255로 모든 비트가 설정됨을 의미합니다. 바이트의 최대값이 255인 이유를 살펴보겠습니다.
------------------------------------------- | 1 Byte ( 8 bits ) | ------------------------------------------- |Place Value | 128| 64| 32| 16| 8| 4| 2| 1| -------------------------------------------
이 1바이트 표현
1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255(1바이트)
더 나은 이해를 위한 몇 가지 예
"AND" 연산자: &
$a = 9; $b = 10; echo $a & $b;
이것은 숫자 8을 출력할 것입니다. 왜? 그럼 테이블 예제를 사용하여 봅시다.
------------------------------------------- | 1 Byte ( 8 bits ) | ------------------------------------------- |Place Value | 128| 64| 32| 16| 8| 4| 2| 1| ------------------------------------------- | $a | 0| 0| 0| 0| 1| 0| 0| 1| ------------------------------------------- | $b | 0| 0| 0| 0| 1| 0| 1| 0| ------------------------------------------- | & | 0| 0| 0| 0| 1| 0| 0| 0| -------------------------------------------
따라서 테이블에서 함께 공유하는 유일한 비트는 8비트임을 알 수 있습니다.
두 번째 예
$a = 36; $b = 103; echo $a & $b; // This would output the number 36. $a = 00100100 $b = 01100111
두 개의 공유 비트는 32와 4이며, 더하면 36이 반환됩니다.
"또는" 연산자: |
$a = 9; $b = 10; echo $a | $b;
이것은 숫자 11을 출력할 것입니다. 왜?
------------------------------------------- | 1 Byte ( 8 bits ) | ------------------------------------------- |Place Value | 128| 64| 32| 16| 8| 4| 2| 1| ------------------------------------------- | $a | 0| 0| 0| 0| 1| 0| 0| 1| ------------------------------------------- | $b | 0| 0| 0| 0| 1| 0| 1| 0| ------------------------------------------- | | | 0| 0| 0| 0| 1| 0| 1| 1| -------------------------------------------
8, 2, 1 열에 3비트가 설정되어 있음을 알 수 있습니다. 더하기: 8+2+1=11.
답변자 : Community Wiki
<=>
우주선 운영자
PHP 7에 추가됨
우주선 연산자 <=>
는 PHP 7에 추가된 최신 비교 연산자입니다. ==
, !=
, ===
, !==
)와 우선 순위가 동일한 비연관 이항 연산자입니다. 이 연산자를 사용하면 왼쪽 피연산자와 오른쪽 피연산자 간의 3방향 비교가 더 간단해집니다.
연산자는 다음과 같은 정수 표현식을 생성합니다.
- 두 피연산자가 같을 때
0
- 왼쪽 피연산자가 오른쪽 피연산자보다 작을 때
0
보다 작음 - 왼쪽 피연산자가 오른쪽 피연산자보다 크면
0
예
1 <=> 1; // 0 1 <=> 2; // -1 2 <=> 1; // 1
이 연산자를 사용하는 좋은 실제 적용은 두 값 간의 3방향 비교를 기반으로 0, 음수 또는 양의 정수를 반환할 것으로 예상되는 비교 유형 콜백에 있습니다. usort
전달된 비교 함수가 그러한 예입니다.
PHP 7 이전에는 다음과 같이 작성합니다.
$arr = [4,2,1,3]; usort($arr, function ($a, $b) { if ($a < $b) { return -1; } elseif ($a > $b) { return 1; } else { return 0; } });
PHP 7부터 다음과 같이 작성할 수 있습니다.
$arr = [4,2,1,3]; usort($arr, function ($a, $b) { return $a <=> $b; // return $b <=> $a; // for reversing order });
답변자 : Community Wiki
_
gettext()의 별칭
_()
에서처럼 밑줄 문자 '_' gettext()
함수의 별칭입니다.
답변자 : Community Wiki
통사론 | 이름 | 설명 |
---|
x == y | 평등 | x와 y가 동일한 키/값 쌍을 가지고 있으면 true |
x != y | 불평등 | x가 y와 같지 않으면 true |
x === y | 신원 | x와 y가 동일한 키/값 쌍을 가지고 있으면 true 같은 순서로 같은 종류의 |
x !== y | 비신원 | x가 y와 동일하지 않으면 true |
x <=> y | 우주선 | x가 y와 같으면 0, x > y이면 0보다 크고 x < y이면 0보다 작음 |
++x | 사전 증가 | x를 1씩 증가시킨 다음 x를 반환합니다. |
x++ | 사후 증가 | x를 반환한 다음 x를 1씩 증가시킵니다. |
--x | 사전 감소 | x를 1 감소한 다음 x를 반환합니다. |
x-- | 사후 감소 | x를 반환한 다음 x를 1 감소합니다. |
x and y | 그리고 | true x와 y가 모두있는 경우 true . x=6, y=3이면 (x < 10 and y > 1) 은 true |
x && y | 그리고 | true x와 y가 모두있는 경우 true . x=6, y=3이면 (x < 10 && y > 1) 리턴 true |
x or y | 또는 | true X의 경우 또는 y는 true . x=6, y=3이면 (x < 10 or y > 10) 은 true |
x || y | 또는 | true X의 경우 또는 y는 true . x=6, y=3이면 (x < 3 || y > 1) 은 true |
a . b | 연쇄 | "Hi" 라는 두 문자열을 연결합니다. "하아" |
답변자 : Community Wiki
매직 상수 : 이것은 단순한 기호가 아니라 이 토큰 패밀리의 중요한 부분입니다. 어디에 사용하느냐에 따라 달라지는 8가지 마법 상수가 있습니다.
__LINE__
: 파일의 현재 줄 번호.
__FILE__
: 파일의 전체 경로와 파일 이름. 포함 내에서 사용되는 경우 포함된 파일의 이름이 반환됩니다. PHP 4.0.2부터 __FILE__
항상 심볼릭 링크가 해결된 절대 경로를 포함하지만 이전 버전에서는 어떤 상황에서 상대 경로를 포함했습니다.
__DIR__
: 파일의 디렉토리. 포함 내에서 사용되는 경우 포함된 파일의 디렉터리가 반환됩니다. dirname(__FILE__)
과 동일합니다. 이 디렉토리 이름에는 루트 디렉토리가 아닌 한 후행 슬래시가 없습니다. (PHP 5.3.0에 추가되었습니다.)
__FUNCTION__
: 함수 이름. (PHP 4.3.0에 추가됨) PHP 5부터 이 상수는 선언된 대로 함수 이름을 반환합니다(대소문자 구분). PHP 4에서 값은 항상 소문자입니다.
__CLASS__
: 클래스 이름. (PHP 4.3.0에 추가됨) PHP 5부터 이 상수는 선언된 대로 클래스 이름을 반환합니다(대소문자 구분). PHP 4에서 값은 항상 소문자입니다. 클래스 이름에는 선언된 네임스페이스가 포함됩니다(예: Foo\Bar
). PHP 5.4부터 __CLASS__
에서도 작동합니다. __CLASS__
메서드에서 사용되는 경우 __CLASS__는 트레이트가 사용되는 클래스의 이름입니다.
__TRAIT__
이름. (PHP 5.4.0에 추가됨) PHP 5.4부터 이 상수는 선언된 특성을 반환합니다(대소문자 구분). 특성 이름에는 선언된 네임스페이스가 포함됩니다(예: Foo\Bar
).
__METHOD__
: 클래스 메서드 이름. (PHP 5.0.0에 추가됨) 메서드 이름은 선언된 대로 반환됩니다(대소문자 구분).
__NAMESPACE__
: 현재 네임스페이스의 이름(대소문자 구분). 이 상수는 컴파일 타임에 정의됩니다(PHP 5.3.0에 추가됨).
원천
답변자 : Community Wiki
유형 연산자
instanceof
는 PHP 변수가 특정 클래스의 인스턴스화된 객체인지 여부를 결정하는 데 사용됩니다.
<?php class mclass { } class sclass { } $a = new mclass; var_dump($a instanceof mclass); var_dump($a instanceof sclass);
위의 예는 다음을 출력합니다.
bool(true) bool(false)
이유: 위의 예 $a
mclass
의 객체 mclass
인스턴스가 아닌 mclass 데이터만 사용 sclass
상속이 있는 예
<?php class pclass { } class childclass extends pclass { } $a = new childclass; var_dump($a instanceof childclass); var_dump($a instanceof pclass);
위의 예는 다음을 출력합니다.
bool(true) bool(true)
클론을 사용한 예
<?php class cloneable { } $a = new cloneable; $b = clone $a; var_dump($a instanceof cloneable); var_dump($b instanceof cloneable);
위의 예는 다음을 출력합니다.
bool(true) bool(true)
답변자 : Community Wiki
PHP 의 연산자 개요:
- $a && $b : $a와 $b가 모두 TRUE이면 TRUE입니다.
- $a || $b : $a 또는 $b가 TRUE이면 TRUE입니다.
- $a xor $b : $a 또는 $b 중 하나가 TRUE이지만 둘 모두가 아닌 경우 TRUE입니다.
- ! $a : $a가 TRUE가 아니면 TRUE입니다.
- $a 및 $b : $a와 $b가 모두 TRUE이면 TRUE입니다.
- $a 또는 $b : $a 또는 $b가 TRUE이면 TRUE입니다.
- $a == $b : 저글링 유형 후 $a가 $b와 같으면 TRUE입니다.
- $a === $b : $a가 $b와 같고 동일한 유형이면 TRUE입니다.
- $a != $b : 유형 저글링 후 $a가 $b와 같지 않으면 TRUE입니다.
- $a <> $b : 유형 저글링 후 $a가 $b와 같지 않으면 TRUE입니다.
- $a !== $b : $a가 $b와 같지 않거나 같은 유형이 아니면 TRUE입니다.
- $a < $b : $a가 $b보다 작으면 TRUE입니다.
- $a > $b : $a가 $b보다 크면 TRUE입니다.
- $a <= $b : $a가 $b보다 작거나 같으면 TRUE입니다.
- $a >= $b : $a가 $b보다 크거나 같으면 TRUE입니다.
- $a <=> $b : $a가 각각 $b보다 작거나 같거나 클 때 0보다 작거나 같거나 큰 정수입니다. PHP 7부터 사용 가능합니다.
- $a? $b : $c : $a가 $b를 리턴하면 $c를 리턴( 삼항 연산자 )
- $a ?? $c : $a 와 같습니까? $a : $c ( null 병합 연산자 - PHP >=7 필요)
- -$a : $a의 반대.
- $a + $b : $a와 $b의 합.
- $a - $b : $a와 $b의 차이.
- $a * $b : $a와 $b의 곱.
- $a / $b : $a와 $b의 몫.
- $a % $b : $a를 $b로 나눈 나머지.
- $a ** $b : $a를 $b' 제곱한 결과(PHP 5.6에 도입됨)
- ++$a : $a를 1씩 증가시킨 다음 $a를 반환합니다.
- $a++ : $a를 반환한 다음 $a를 1씩 증가시킵니다.
- --$a : $a를 1 감소한 다음 $a를 반환합니다.
- $a-- : $a를 반환한 다음 $a를 1 감소합니다.
- $a & $b : $a와 $b 모두에 설정된 비트가 설정됩니다.
- $a | $b : $a 또는 $b에 설정된 비트가 설정됩니다.
- $a ^ $b : $a 또는 $b에 설정되어 있지만 둘 다 설정되지 않은 비트.
- ~ $a : $a에 설정된 비트가 설정되지 않고 그 반대의 경우도 마찬가지입니다.
- $a << $b : $a $b 단계의 비트를 왼쪽으로 이동(각 단계는 "2를 곱함"을 의미함)
- $a >> $b : $a $b 단계의 비트를 오른쪽으로 이동(각 단계는 "2로 나누기"를 의미함)
- $a + $b : $a와 $b의 합집합.
- $a == $b : $a와 $b의 키/값 쌍이 같으면 참.
- $a === $b : $a와 $b가 같은 순서와 같은 유형의 동일한 키/값 쌍을 가지고 있으면 참입니다.
- $a != $b : $a가 $b와 같지 않으면 TRUE입니다.
- $a <> $b : $a가 $b와 같지 않으면 TRUE입니다.
- $a !== $b : $a가 $b와 같지 않으면 TRUE입니다.
- $a = $b : $b의 값이 $a에 할당됨
- $a += $b : $a = $a + $b와 동일
- $a -= $b : $a = $a - $b와 동일
- * $a = $b : $a = $a * $b와 동일
- $a /= $b : $a = $a / $b와 동일
- $a %= $b : $a = $a % $b와 동일
- **$a = $b : $a = $a ** $b와 동일
- $a .= $b : $a = $a 와 동일합니다. $b
- $a &= $b : $a = $a & $b와 동일
- $a |= $b : $a = $a와 동일 | $b
- $a ^= $b : $a = $a ^ $b와 동일
- $a <<= $b : $a = $a << $b와 동일
- $a >>= $b : $a = $a >> $b와 동일
- $a ??= $b : $a가 null이거나 정의되지 않은 경우 $b의 값이 $a에 할당됩니다( null 병합 할당 연산자 - PHP>=7.4 필요).
메모
and
연산자 및 or
=
보다 우선 순위가 낮습니다.
$a = true and false;
의미합니다. ($a = true) and false
동일합니다.
대부분의 경우 &&
및 ||
, C, Java 또는 JavaScript와 같은 언어에서 알려진 방식으로 작동합니다.
답변자 : Community Wiki
우주선 연산자 <=>
(PHP 7에 추가됨)
<=>
우주선 연산자의 예(PHP 7, 출처: PHP 매뉴얼):
변수의 3방향 비교를 위한 정수, 부동 소수점, 문자열, 배열 및 개체.
// Integers echo 10 <=> 10; // 0 echo 10 <=> 20; // -1 echo 20 <=> 10; // 1 // Floats echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // Strings echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 // Comparison is case-sensitive echo "B" <=> "a"; // -1 echo "a" <=> "aa"; // -1 echo "zz" <=> "aa"; // 1 // Arrays echo [] <=> []; // 0 echo [1, 2, 3] <=> [1, 2, 3]; // 0 echo [1, 2, 3] <=> []; // 1 echo [1, 2, 3] <=> [1, 2, 1]; // 1 echo [1, 2, 3] <=> [1, 2, 4]; // -1 // Objects $a = (object) ["a" => "b"]; $b = (object) ["a" => "b"]; echo $a <=> $b; // 0 $a = (object) ["a" => "b"]; $b = (object) ["a" => "c"]; echo $a <=> $b; // -1 $a = (object) ["a" => "c"]; $b = (object) ["a" => "b"]; echo $a <=> $b; // 1 // only values are compared $a = (object) ["a" => "b"]; $b = (object) ["b" => "b"]; echo $a <=> $b; // 1
답변자 : Community Wiki
{}
중괄호
그리고 지난 포스팅에 대한 몇 마디
$x[4] = 'd'; // it works $x{4} = 'd'; // it works $echo $x[4]; // it works $echo $x{4}; // it works $x[] = 'e'; // it works $x{} = 'e'; // does not work $x = [1, 2]; // it works $x = {1, 2}; // does not work echo "${x[4]}"; // it works echo "${x{4}}"; // does not work echo "{$x[4]}"; // it works echo "{$x{4}}"; // it works
답변자 : Community Wiki
널 병합 연산자(??)
isset()
과 함께 삼항 연산자를 사용해야 하는 일반적인 경우를 위해 PHP 7.0에 추가되었습니다. NULL
이 아닌 경우 첫 번째 피연산자를 반환합니다. 그렇지 않으면 두 번째 피연산자를 반환합니다.
<?php // Fetches the value of $_GET['user'] and returns 'nobody' // if it does not exist. $username = $_GET['user'] ?? 'nobody'; // This is equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; // Coalescing can be chained: this will return the first // defined value out of $_GET['user'], $_POST['user'], and // 'nobody'. $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody'; ?>
답변자 : Community Wiki
PHP 문자열: PHP 문자열은 두 가지 방법이 아닌 네 가지 방법으로 지정할 수 있습니다.
1) 작은따옴표 문자열:
$string = 'This is my string'; // print This is my string
2) 큰따옴표 문자열:
$str = 'string'; $string = "This is my $str"; // print This is my string
3) 헤레독:
$string = <<<EOD This is my string EOD; // print This is my string
4) Nowdoc(PHP 5.3.0부터):
$string = <<<'END_OF_STRING' This is my string END_OF_STRING; // print This is my string
답변자 : Community Wiki
질문:
=>
은(는) 무슨 뜻인가요?
답변:
=>
우리 인간이 연관 배열에서 "Key" => "Value"
쌍을 분리하기 위해 사용하기로 결정한 기호입니까?
정교화:
이것을 이해하려면 연관 배열이 무엇인지 알아야 합니다. 일반적인 프로그래머가 배열(PHP에서 )을 생각할 때 가장 먼저 떠오르는 것은 다음과 비슷할 것입니다.
$myArray1 = array(2016, "hello", 33);//option 1 $myArray2 = [2016, "hello", 33];//option 2 $myArray3 = [];//option 3 $myArray3[] = 2016; $myArray3[] = "hello"; $myArray3[] = 33;
코드의 뒷부분에서 배열을 호출하려는 경우 다음을 수행할 수 있습니다.
echo $myArray1[1];// output: hello echo $myArray2[1];// output: hello echo $myArray3[1];// output: hello
여태까지는 그런대로 잘됐다. 그러나, 인간으로, 우리는 그 인덱스 기억하는 하드를 찾을 수 있습니다 [0]
배열은 인덱스, 2016 년의 값입니다 [1]
배열의 인 인사, 인덱스 [2]
배열의 간단한이다 정수 값 . 우리가 가질 수 있는 대안은 연관 배열(Associative Array )이라고 하는 것을 사용하는 것입니다. 연관 배열은 순차 배열 과 몇 가지 차이점이 있습니다( 이전의 경우는 다음 값마다 1씩 증가하여 미리 결정된 순서로 사용되는 인덱스를 증가시켰기 때문입니다 ).
차이점( 순차 배열과 연관 배열 사이 ):
예를 들어:
$myArray1 = array( "Year" => 2016, "Greetings" => "hello", "Integer_value" => 33);//option 1 $myArray2 = [ "Year" => 2016, "Greetings" => "hello", "Integer_value" => 33];//option 2 $myArray3 = [];//option 3 $myArray3["Year"] = 2016; $myArray3["Greetings"] = "hello"; $myArray3["Integer_value"] = 33;
이제 이전과 동일한 출력을 수신하기 위해 key
값이 배열 인덱스에 사용됩니다.
echo $myArray1["Greetings"];// output: hello echo $myArray2["Greetings"];// output: hello echo $myArray3["Greetings"];// output: hello
최종 포인트:
따라서 상기 예에서, 상기 볼 꽤 용이 =>
기호는 각각 간의 연관 배열의 관계를 표현하는 데 사용되는 key
와 value
어레이 내의 값 개시 DURING 배열 쌍.
답변자 : Community Wiki
질문 :
PHP에서 "&"는 무엇을 의미합니까?
PHP "&" 연산자
익숙해지면 생활이 편해집니다..(아래 예를 주의 깊게 확인하세요)
&는 일반적으로 $a와 $b에 모두 설정된 비트가 설정되었는지 확인합니다.
이러한 호출이 어떻게 작동하는지 눈치채셨나요?
error_reporting(E_ERROR | E_WARNING | E_PARSE); error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); error_reporting(E_ALL & ~E_NOTICE); error_reporting(E_ALL);
따라서 위의 모든 것 뒤에는 비트 연산자와 비트의 게임이 있습니다.
이 중 하나의 유용한 경우는 아래와 같은 쉬운 구성이므로 단일 정수 필드가 수천 개의 콤보를 저장할 수 있습니다.
대부분의 사람들은 이미 문서를 읽었지만 이러한 비트 연산자의 실제 사용 사례를 신뢰하지 않았습니다.
당신이 좋아할 예
<?php class Config { // our constants must be 1,2,4,8,16,32,64 ....so on const TYPE_CAT=1; const TYPE_DOG=2; const TYPE_LION=4; const TYPE_RAT=8; const TYPE_BIRD=16; const TYPE_ALL=31; private $config; public function __construct($config){ $this->config=$config; if($this->is(Config::TYPE_CAT)){ echo 'cat '; } if($this->is(Config::TYPE_DOG)){ echo 'dog '; } if($this->is(Config::TYPE_RAT)){ echo 'rat '; } if($this->is(Config::TYPE_LION)){ echo 'lion '; } if($this->is(Config::TYPE_BIRD)){ echo 'bird '; } echo "\n"; } private function is($value){ return $this->config & $value; } } new Config(Config::TYPE_ALL); // cat dog rat lion bird new Config(Config::TYPE_BIRD); //bird new Config(Config::TYPE_BIRD | Config::TYPE_DOG); //dog bird new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT); //rat lion bird
답변자 : Community Wiki
==
변수 데이터 유형을 고려하지 않고 동등성 검사에 사용됩니다.
===
는 변수 값 과 데이터 유형 모두에 대한 동등성을 확인하는 데 사용됩니다.
예시
$a = 5
if ($a == 5)
- true로 평가됩니다.
if ($a == '5')
- 이 두 값을 비교하는 동안 PHP는 내부적으로 해당 문자열 값을 정수로 변환한 다음 두 값을 비교하기 때문에 true로 평가됩니다.
if ($a === 5)
- true로 평가됩니다.
if ($a === '5')
- 값이 5이기 때문에 false로 평가되지만 이 값 5는 정수가 아닙니다.
답변자 : Community Wiki
Null 병합 연산자 "??" (PHP 7에 추가됨)
연산자에 대한 가장 눈에 띄는 이름은 아니지만 PHP 7은 다소 편리한 null 병합 기능을 제공하므로 예제를 공유하고자 합니다.
PHP 5에는 이미 값을 테스트한 다음 true를 반환하면 두 번째 요소를 반환하고 그렇지 않으면 세 번째 요소를 반환하는 삼항 연산자가 있습니다.
echo $count ? $count : 10; // outputs 10
첫 번째 요소와 동일한 경우 두 번째 요소를 건너뛸 수 있도록 하는 약어도 있습니다. echo $count ?: 10; // 10도 출력
PHP 7에서는 추가로 ?? 연산자는 극도의 혼란을 나타내는 대신 일반적으로 두 개의 물음표를 함께 사용하는 대신 값 문자열을 함께 연결할 수 있습니다. 왼쪽에서 오른쪽으로 읽으면 존재하고 null이 아닌 첫 번째 값이 반환될 값입니다.
// $a is not set $b = 16; echo $a ?? 2; // outputs 2 echo $a ?? $b ?? 7; // outputs 16
이 구성은 사용자 입력 또는 기존 구성에서 오는 하나 이상의 값에 우선 순위를 부여하고 해당 구성이 누락된 경우 지정된 기본값으로 안전하게 폴백하는 데 유용합니다. 작은 기능이지만 응용 프로그램이 PHP 7로 업그레이드되는 즉시 사용하게 될 기능입니다.
답변자 : Community Wiki
nullable 반환 유형 선언
PHP 7은 반환 유형 선언에 대한 지원을 추가합니다. 인수 유형 선언과 유사하게 반환 유형 선언은 함수에서 반환될 값의 유형을 지정합니다. 인수 유형 선언에 사용할 수 있는 것과 동일한 유형을 반환 유형 선언에 사용할 수 있습니다.
엄격한 형식 지정은 반환 형식 선언에도 영향을 줍니다. 기본 약한 모드에서 반환된 값은 아직 해당 유형이 아닌 경우 올바른 유형으로 강제 변환됩니다. 강력한 모드에서 반환된 값은 올바른 유형이어야 합니다. 그렇지 않으면 TypeError가 발생합니다.
PHP 7.1.0부터, 반환 값은 물음표(?)를 접두사로 타입 이름에 붙여서 nullable로 표시할 수 있습니다. 이는 함수가 지정된 유형 또는 NULL을 반환함을 나타냅니다.
<?php function get_item(): ?string { if (isset($_GET['item'])) { return $_GET['item']; } else { return null; } } ?>
원천
답변자 : Community Wiki
Splat 연산자로서의 3개의 DOTS(...) (PHP 5.6부터)
PHP에는 Splat 연산자라고 하는 연산자 "..."(점 3개)가 있습니다. 함수에서 임의의 수의 매개변수를 전달하는 데 사용되며 이러한 유형의 함수를 가변 함수라고 합니다. "..."(점 3개)의 사용 예를 들어 보겠습니다.
예 1:
<?php function calculateNumbers(...$params){ $total = 0; foreach($params as $v){ $total = $total + $v; } return $total; } echo calculateNumbers(10, 20, 30, 40, 50); //Output 150 ?>
computeNumbers() 함수의 각 인수는 "… "를 사용할 때 $params를 배열로 전달합니다.
"… " 연산자를 사용하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지 예입니다.
예 2:
<?php function calculateNumbers($no1, $no2, $no3, $no4, $no5){ $total = $no1 + $no2 + $no3 + $no4 + $no5; return $total; } $numbers = array(10, 20, 30, 40, 50); echo calculateNumbers(...$numbers); //Output 150 ?>
예 3:
<?php function calculateNumbers(...$params){ $total = 0; foreach($params as $v){ $total = $total + $v; } return $total; } $no1 = 70; $numbers = array(10, 20, 30, 40, 50); echo calculateNumbers($no1, ...$numbers); //Output 220 ?>
예 4:
<?php function calculateNumbers(...$params){ $total = 0; foreach($params as $v){ $total = $total + $v; } return $total; } $numbers1 = array(10, 20, 30, 40, 50); $numbers2 = array(100, 200, 300, 400, 500); echo calculateNumbers(...$numbers1, ...$numbers2); //Output 1650 ?>
답변자 : Community Wiki
?-> NullSafe 연산자
PHP 8.0에 추가됨
NullSafe Operator
입니다. 함수를 호출하거나 null
null
을 반환합니다. Nullsafe 연산자는 연결될 수 있으며 메서드와 속성 모두에서 사용할 수 있습니다.
$objDrive = null; $drive = $objDrive?->func?->getDriver()?->value; //return null $drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object
Nullsafe 연산자는 배열 키에서 작동하지 않습니다.
$drive['admin']?->getDriver()?->value //Warning: Trying to access array offset on value of type null $drive = []; $drive['admin']?->getAddress()?->value //Warning: Undefined array key "admin"
답변자 : Community Wiki
NullSafe 연산자 "?->"(아마도) php8 이후
PHP8에서는 이 새로운 연산자가 허용되었습니다. 여기에서 문서를 찾을 수 있습니다. ?->
NullSafe Operator
. 함수를 호출하거나 null
null
을 반환합니다.
예:
<?php $obj = null; $obj = $obj?->attr; //return null $obj = ?->funct(); // return null $obj = $objDrive->attr; // Error: Trying to get property 'attr' of non-object ?>
답변자 : Community Wiki
PHP 배열:
배열은 하나 이상의 유사한 유형의 값을 단일 값에 저장하는 데이터 구조입니다.
• 숫자 배열 - 숫자 인덱스가 있는 배열. 값은 선형 방식으로 저장되고 액세스됩니다.
• 연관 배열 - 문자열을 인덱스로 사용하는 배열. 이것은 엄격한 선형 인덱스 순서가 아닌 키 값과 관련된 요소 값을 저장합니다.
• 다차원 배열 - 하나 이상의 배열과 값을 포함하는 배열은 여러 인덱스를 사용하여 액세스합니다. 숫자 배열
이 배열은 숫자, 문자열 및 모든 개체를 저장할 수 있지만 인덱스는 숫자로 표시됩니다. 기본적으로 배열 인덱스는 0부터 시작합니다.
예시 :
<html> <body> <?php /* First method to create array. */ $numbers = array( 1, 2, 3, 4, 5); foreach( $numbers as $value ) { echo "Value is $value <br />"; } /* Second method to create array. */ $numbers[0] = "one"; $numbers[1] = "two"; $numbers[2] = "three"; $numbers[3] = "four"; $numbers[4] = "five"; foreach( $numbers as $value ) { echo "Value is $value <br />"; } ?> </body> </html>
출력:
Value is 1 Value is 2 Value is 3 Value is 4 Value is 5 Value is one Value is two Value is three Value is four Value is five
연관 배열
연관 배열은 기능 측면에서 숫자 배열과 매우 유사하지만 인덱스 측면에서 다릅니다. 연관 배열은 키와 값 사이에 강력한 연관을 설정할 수 있도록 인덱스를 문자열로 갖습니다.
예시:
<html> <body> <?php /* First method to associate create array. */ $salaries = array("mohammad" => 2000, "qadir" => 1000, "zara" => 500); echo "Salary of mohammad is ". $salaries['mohammad'] . "<br />"; echo "Salary of qadir is ". $salaries['qadir']. "<br />"; echo "Salary of zara is ". $salaries['zara']. "<br />"; /* Second method to create array. */ $salaries['mohammad'] = "high"; $salaries['qadir'] = "medium"; $salaries['zara'] = "low"; echo "Salary of mohammad is ". $salaries['mohammad'] . "<br />"; echo "Salary of qadir is ". $salaries['qadir']. "<br />"; echo "Salary of zara is ". $salaries['zara']. "<br />"; ?> </body> </html>
출력:
Salary of mohammad is 2000 Salary of qadir is 1000 Salary of zara is 500 Salary of mohammad is high Salary of qadir is medium Salary of zara is low
다차원 배열
다차원 배열 기본 배열의 각 요소는 배열일 수도 있습니다. 그리고 하위 배열의 각 요소는 배열일 수 있습니다. 다차원 배열의 값은 다중 인덱스를 사용하여 액세스됩니다.
예시
<html> <body> <?php $marks = array( "mohammad" => array ( "physics" => 35, "maths" => 30, "chemistry" => 39 ), "qadir" => array ( "physics" => 30, "maths" => 32, "chemistry" => 29 ), "zara" => array ( "physics" => 31, "maths" => 22, "chemistry" => 39 ) ); /* Accessing multi-dimensional array values */ echo "Marks for mohammad in physics : " ; echo $marks['mohammad']['physics'] . "<br />"; echo "Marks for qadir in maths : "; echo $marks['qadir']['maths'] . "<br />"; echo "Marks for zara in chemistry : " ; echo $marks['zara']['chemistry'] . "<br />"; ?> </body> </html>
산출:
Marks for mohammad in physics : 35 Marks for qadir in maths : 32 Marks for zara in chemistry : 39
PHP 배열 함수
array() -> 배열을 생성합니다.
array_change_key_case() -> 배열의 모든 키를 소문자 또는 대문자로 변경합니다.
array_chunk() -> 배열을 배열 청크로 분할 array_column() -> 입력 배열의 단일 열 값을 반환합니다.
array_combine() -> "key" 배열 하나와 "values" 배열 하나의 요소를 사용하여 배열을 만듭니다.
array_count_values() -> 배열의 모든 값을 셉니다.
array_diff() -> 배열을 비교하고 차이점을 반환합니다(값만 비교).
array_diff_assoc() -> 배열을 비교하고 차이점을 반환합니다(키와 값 비교).
array_diff_key() -> 배열을 비교하고 차이점을 반환합니다(비교 키만).
array_diff_uassoc() -> 배열을 비교하고 차이점을 반환합니다(사용자 정의 키 비교 기능을 사용하여 키와 값 비교).
array_diff_ukey() -> 배열을 비교하고 차이점을 반환합니다(사용자 정의 키 비교 기능을 사용하여 키만 비교).
array_fill() -> 배열을 값으로 채웁니다.
array_fill_keys() -> 키를 지정하여 배열을 값으로 채웁니다.
array_filter() -> 콜백 함수를 사용하여 배열의 값을 필터링합니다.
array_flip() -> 배열에서 연관된 값으로 모든 키를 뒤집거나 교환합니다.
array_intersect() -> 배열을 비교하고 일치 항목을 반환합니다(값만 비교).
array_intersect_assoc() -> 배열을 비교하고 일치 항목을 반환합니다(키와 값 비교)
array_intersect_key() -> 배열을 비교하고 일치 항목을 반환합니다(비교 키만).
array_intersect_uassoc() -> 배열을 비교하고 일치 항목을 반환합니다(사용자 정의 키 비교 기능을 사용하여 키와 값 비교).
array_intersect_ukey() -> 배열을 비교하고 일치 항목을 반환합니다(사용자 정의 키 비교 기능을 사용하여 키만 비교).
array_key_exists() -> 지정된 키가 배열에 존재하는지 확인합니다.
array_keys() -> 배열의 모든 키를 반환합니다.
array_map() -> 배열의 각 값을 사용자가 만든 함수로 보내고 새 값을 반환합니다.
array_merge() -> 하나 이상의 배열을 하나의 배열로 병합합니다.
array_merge_recursive() -> 하나 이상의 배열을 재귀적으로 하나의 배열로 병합합니다.
array_multisort() -> 다중 또는 다차원 배열을 정렬합니다.
출처 : Here
출처 : http:www.stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php">