참조 — PHP에서이 기호의 의미는 무엇입니까?


4477

이게 뭐야?

이것은 PHP의 구문에 대해 자주 제기되는 질문 모음입니다. 이것은 커뮤니티 위키이기도하므로 모든 사람이이 목록 유지에 참여하도록 초대됩니다.

왜 이런거야?

연산자와 다른 구문 토큰에 대한 질문을 찾기가 어려웠습니다 .¹
주요 아이디어는 스택 오버플로에 대한 기존 질문에 대한 링크를 갖는 것이므로 PHP 매뉴얼의 내용을 복사하지 않고 질문을 쉽게 참조 할 수 있습니다.

참고 : 2013 년 1 월부터 Stack Overflow 는 특수 문자를 지원합니다 . 검색어를 따옴표로 묶습니다 (예 :[php] "==" vs "==="

여기서 무엇을해야합니까?

이러한 질문을했기 때문에 누군가가 여기에서 지적한 경우 아래에서 특정 구문을 찾으십시오. PHP 매뉴얼 의 링크 된 페이지 와 링크 된 질문이 귀하의 질문에 대한 답변이 될 것입니다. 그렇다면 대답을 찬성하는 것이 좋습니다. 이 목록은 다른 사람들이 제공 한 도움을 대신 할 수 없습니다.

리스트

특정 토큰이 아래에 없으면 파서 토큰 목록 에서 찾을 수 있습니다 .


& 비트 연산자 또는 참조


=& 참고 문헌


&= 비트 연산자


&& 논리 연산자


% 산술 연산자


!! 논리 연산자


@ 오류 제어 연산자


?: 삼항 연산자


?? Null Coalesce 연산자 (PHP 7부터)


?string ?int ?array ?bool ?float nullable 반환 형식 선언 (PHP 7.1부터)


: 제어 구조에 대한 대체 구문 , Ternary Operator


:: 범위 확인 연산자


\ 네임 스페이스


-> 클래스와 객체


=> 배열


^ 비트 연산자


>> 비트 연산자


<< 비트 연산자


<<< Heredoc 또는 Nowdoc


= 할당 연산자


== 비교 연산자


=== 비교 연산자


!== 비교 연산자


!= 비교 연산자


<> 비교 연산자


<=> 비교 연산자 (PHP 7.0부터)


| 비트 연산자


|| 논리 연산자


~ 비트 연산자


+ 산술 연산자 , 배열 연산자


+=-= 할당 연산자


++-- 증가 / 감소 연산자


.= 할당 연산자


. 문자열 연산자


, 함수 인수

, 변수 선언


$$ 변수 변수


` 실행 연산자


<?= 짧은 오픈 태그


[] 배열 (PHP 5.4 이후 짧은 구문)


<? 태그 열기 및 닫기


... 인자 풀기 (PHP 5.6부터)


** 지수화 (PHP 5.6부터)


# 한 줄 쉘 스타일 주석


:? 널 입력 가능 리턴 유형


?-> NullSafe 운영자 호출



36
나는 이것이 PHP가 아니라는 것을 알고 있지만 일반적으로 사용되는 phpDocumentor 주석 구문에 대해 phpdoc.org에 대한 링크를 포함시키는 것은 /**어떻습니까?
Mike

8
대괄호와 중괄호를 제안 할 수 있습니까?
ajreal

124
나는이 문제를 너무 많이 겪었습니다 (특수 문자를 검색 할 수 없음). 왜냐하면 특수 문자를 무시하지 않는 검색 엔진 인 SymbolHound를 만들었습니다 . 또한 StackApps에 게시했습니다 .
dncrane

1
글쎄, 제목이 왜? , "주된 아이디어는 스택 오버플로에 대한 기존 질문에 대한 링크를 가지고 있기 때문에 질문을 쉽게 참조 할 수 있기 때문입니다."
Herbert

3
질문은 오늘 (Nov.20 / 15) 질문했다 stackoverflow.com/questions/33833259/what-is-rscat-in-php 물어 "PHP에서 $ rsCat 무엇은" (그 문제는 아직 가시화되지 삭제해야합니다) . 이상하게도 $변수에 대한 참조는 없지만 $$변수 변수에 대해서만 언급 됩니다. 나는 그것이 어딘가에 수정되어야한다고 믿는다.
Funk Forty Niner

답변:


1171

연산자 증가 / 감소

++ 증분 연산자

-- 감소 연산자

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다음, 등등입니다.

문자 변수는 증가 할 수 있지만 감소 할 수 없으며 일반 ASCII 문자 (az 및 AZ) 만 지원됩니다.


스택 오버플로 게시물 :


9
Decrementers는 숫자에만 적용되지 않으며 숫자에만 적용됩니다.
Mark Baker

163
모두를 위해 사전 증분이 무한히 빠르다는 대담한 정보를 제거하십시오. 이것은 조기 최적화의 절대 최악의 예이며 PHP를 배우기 시작하면 사람들의 머리에 이런 종류의 정보가 있어서는 안됩니다.
Lotus Notes

14
@Lotus-나는 그것이 재미있는 사실이라고 생각합니다. PHP, C ++ 등의 초보자라면 ++ i와 i ++가 다른 속도로 작동하기에 충분히 다르다는 것은 꽤 별난 것 같습니다. 나는 그것을 매혹 발견했다.
Peter Ajtai

12
@Peter Ajtai 예, 흥미 롭습니다. 그러나 게시물을 구성한 방식에서 언어를 사용하는 데 절대적으로 필요한 PHP의 주요 사실 중 하나 인 것처럼 보입니다.
Lotus Notes

4
그것이 나인지 아닌지 확실하지 않지만 사과 예제는 약간 오도 된 것처럼 보입니다. '10 개의 사과가 있습니다. 나는 단지 하나를 먹었다는 것은 당신이 11 개의 사과를 가지고 있다고 믿게하지만, 이제 10을 가지고 있다고 말한 후에 하나를 먹지 않고 하나를 먹었으므로 9를 갖게됩니다. 이는 코드가 암시하는 것입니다.
さ り げ な い 告白

440

비트 연산자

조금 무엇입니까? 비트는 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을 합산하십시오.


6
$ a가 255보다 큰 값을 취하면 어떻게됩니까?
Aycan Yaşıt

@ AycanYaşıt 대부분의 운영 체제에서 32 비트 및 64 비트 시스템을 사용하고 있으므로 제한이 255 (8 비트)보다 훨씬 큽니다.
AlbertSamuel

@ AycanYaşıt 사실, 현대의 64 비트 플랫폼에서는 메모리에서 가장 작은 정수가 여전히 64 비트 (8 바이트)이므로 1 바이트 길이의 표현은 정확하지 않습니다.
Kaii

and &이다 0 0 0 0 1 0 0 0 하고 or |있다 0 0 0 0 1 0 1 1?
Vir

285

<=> 우주선 운영자

PHP 7에서 추가됨

우주선 연산자 <=> 그것은 인 PHP 제 첨가 최신 비교 연산자 비 연관 (항등 연산자와 같은 우선 이진 연산자 ==, !=, ===,!== ). 이 연산자를 사용하면 왼쪽 피연산자와 오른쪽 피연산자를보다 간단하게 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;
});

21
다음 $a <=> $b과 다른 점이 확실하지 않음$a - $b
rev

38
@AcidShout $a - $b은 숫자에 대해서는 작동하지만 문자열, 개체 또는 배열에는 작동하지 않습니다.
mcrumley

44
@mcrumley 아니요, 그것보다 나쁩니다. 일반적으로 $a - $b숫자로는 작동하지 않습니다. 정수에 대해서만 작동합니다 . 정수가 아닌 숫자의 경우 작동하지 않습니다. usort비교 함수의 반환 값을로 int캐스팅하면 0.5는 0으로 캐스팅됩니다. 즉, 4와 4.6과 같이 1보다 작은 차이를 가진 두 숫자는 (종속에 따라 다름) 어느 것이 비교 함수에 대한 첫 번째 인수로 전달되는지에 따라) 동일하게 잘못 비교됩니다.
Mark Amery

5
@MarkAmery 마이그레이션 가이드는 운영자의 문서화 된 동작이 아닙니다. 이를 위해 해당 php.net/language.operators.comparison 매뉴얼의 언어 연산자 섹션을 살펴보고 싶다면 실제 문자열의 strcmp를 수행 할 때와 같이 API의 다양한 비교 기능에 의존합니다. 모든 경우에 실제 반환 값을 보장 할 수는 없습니다. 물론 거의 항상 1, 0 또는 -1이지만 libc의 strcmp를 래핑 할 때와 같이 보장 할 수없는 경우 기본 사양과 동일한 정의 된 동작을 안전하게 제공합니다
Sherif

9
@MarkAmery 여기서 요점은 사람들이 정의되지 않은 행동에 의존 할 수 있도록하는 것이 아닙니다. 누군가 1, 0 또는 -1이 아닌 값을 얻는 경우 언어에 문제가 있다고 생각하는 버그 보고서를 제출하는 사람이 있습니다. 어떤 우리가 보장 할 수있는 모든 그 가치가있을 것입니다 문서화 이유 미만 , 이상 , 또는 동일 0을 반드시 1, 0, -1.
셰리프


273
Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
x or y     Or              True if any of x or y are true x=6 y=3
                           (x < 10 or y > 10) returns true 
x || y     Or              True if any of x or y are true x=6 y=3
                           (x < 3 || y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"

239

마술 상수 : 이것은 단순한 상징이 아니라이 토큰 패밀리의 중요한 부분입니다. 사용되는 위치에 따라 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__특성이 사용되는 클래스의 이름입니다.

__TRAIT__: 특성 이름. (PHP 5.4.0에서 추가됨) PHP 5.4부터이 상수는 선언 된대로 대소 문자를 구분하여 특성을 반환합니다. 특성 이름에는 선언 된 네임 스페이스가 포함됩니다 (예 :Foo\Bar .

__METHOD__: 클래스 메소드 이름. (PHP 5.0.0에서 추가됨) 메소드 이름은 선언 된대로 (대소 문자 구분) 리턴됩니다.

__NAMESPACE__: 현재 네임 스페이스의 이름 (대소 문자 구분). 이 상수는 컴파일 타임에 정의됩니다 (PHP 5.3.0에서 추가됨).

출처


150

타입 연산자

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 인스턴스가 아닌 데이터 하십시오.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)

7
위의 '인터페이스'에서도 작동합니다. 이는 특정 인터페이스가 사용 가능한지 확인하는 데 유용합니다.
Ryan Vincent

133

PHP 연산자 의 개요 :


논리 연산자 :

  • $ a && $ b : $ a와 $ b가 모두 참이면 참입니다.
  • $ a || $ b : $ a 또는 $ b가 TRUE이면 TRUE입니다.
  • $ a xor $ b : $ a 또는 $ b가 TRUE이지만 둘 다가 아닌 경우 TRUE입니다.
  • ! $ a : $ a가 참이 아니면 참.
  • $ a와 $ b : $ a 및 $ b가 모두 TRUE이면 TRUE입니다.
  • $ a 또는 $ b : $ a 또는 $ b가 TRUE이면 TRUE입니다.

비교 연산자 :

  • $ a == $ b : 저글링 유형 후 $ a가 $ b와 같으면 참입니다.
  • $ a === $ b : $ a가 $ b와 같고 유형이 같은 경우 TRUE입니다.
  • $ a! = $ b : 유형 저글링 후 $ a가 $ b와 같지 않으면 참입니다.
  • $ a <> $ b : 유형 저글링 후 $ a가 $ b와 같지 않으면 참입니다.
  • $ a! == $ b : $ a가 $ b와 같지 않거나 같은 유형이 아닌 경우 참입니다.
  • $ a <$ b : $ a가 $ b보다 작 으면 참입니다.
  • $ a> $ b : $ a가 $ b보다 크면 TRUE입니다.
  • $ a <= $ b : $ a가 $ b보다 작거나 같으면 참입니다.
  • $ a> = $ b : $ a가 $ b 보다 크거나 같으면 참입니다.
  • $ a <=> $ b : $ a가 각각 $ b보다 작거나 같거나 같을 때 0보다 작거나 같거나 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- : $ a와 $ b의 차이.
  • $ a * $ b : $ a와 $ b의 곱.
  • $ a / $ b : $ a와 $ b의 몫.
  • $ a % $ b : $ a를 $ b로 나눈 나머지.
  • $ a ** $ b : $ a를 $ b의 제곱으로 올린 결과 (PHP 5.6에서 도입)

증가 / 감소 연산자 :

  • ++ $ a : $ a 씩 하나씩 증가시킨 다음 $ 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와 같지 않으면 참입니다.
  • $ a <> $ b : $ a가 $ b와 같지 않으면 참입니다.
  • $ a! == $ b : $ a가 $ b와 동일하지 않으면 참입니다.

할당 연산자 :

  • $ 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와 동일

노트

and연산자와 or연산자는 할당 연산자보다 우선 순위가 낮습니다 =.

이 수단 $a = true and false;에 상당 ($a = true) and false.

대부분의 경우 당신은 아마 사용하기를 원할 것입니다 &&그리고 ||어떤 행동하라 C, Java 또는 자바 스크립트 같은 언어에서 알려진 방법으로.


1
이 오류는 $a ?? $c그것과 동일 말한다, $a ? $a : $c하지만 삼항 연산자 검사 값은 다른 한편으로는, 해당하는 경우, 널 (null) a는 0 $ 0이기 때문에, 당신은 (0을 얻을 것이다 경우, 그래서 널 (null) 값에 대한 검사를 병합 not null), 예를 들어 $a=0; $c=5;다음 이있는 경우 : $a?$a:$c5 를 반환하고 $a??$c0을 반환합니다.
stramin

104

우주선 연산자<=> (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


74

{} 중괄호

그리고 마지막 게시물에 대한 몇 마디

$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

4
속성 이름에 대한 { ''} 표기법. echo $ movies-> movie-> { 'great-lines'}-> line; SimpleXMLElement의 데이터에 액세스하는 데 사용할 수 있습니다. 다른 경우에도 사용할 수 있습니다. php.net/manual/en/simplexml.examples-basic.php
Andrei

68

Null 통합 연산자 (??)

이 연산자는와 함께 삼항 연산자를 사용해야하는 일반적인 경우를 위해 PHP 7.0에 추가되었습니다 isset(). 존재하지 않는 경우 첫 번째 피연산자를 리턴합니다 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';
?>

64

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) Heredoc :

$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

@ Rizier123 : "Heredocs는 클래스 속성을 초기화하는 데 사용할 수 없습니다. PHP 5.3부터이 제한은 변수를 포함하는 heredocs에만 유효합니다"?
PHPFan

48

질문:

무슨 =>뜻입니까?


대답:

=>우리 인간 "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 씩 증가하여 미리 결정된 순서로 사용 된 인덱스를 증가시키기 때문입니다 ).

차이점 ( 순차 배열과 연관 배열 사이 ) :

  • 연관 배열의 선언 중에는 value 할 때 배열에 넣을 내용을key 배열의 뒷부분에서 배열을 호출 할 때 사용할 인덱스 값 ( )을 넣습니다 . 암호. 선언하는 동안 다음 구문이 사용됩니다 "key" => "value".

  • 연관 배열을 사용할 때 key 값은 배열의 색인 내부에 배치되어 원하는을 검색합니다 value.

예를 들어 :

    $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 어레이 내의 값을 개시한다.


36

질문 :

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

30

==변수 데이터 유형을 고려 하지 않고 동등성을 검사하는 데 사용됩니다.

===변수 데이터 유형 모두에 대해 동등성을 검사하는 데 사용됩니다.

$a = 5

  1. if ($a == 5) -참으로 평가됩니다

  2. if ($a == '5') PHP는 내부적으로 문자열 값을 정수로 변환 한 다음 두 값을 비교하기 때문에 true로 평가됩니다.

  3. if ($a === 5) -참으로 평가됩니다

  4. if ($a === '5') -값이 5이지만이 값 5는 정수가 아니므로 false로 평가됩니다.


27

Null Coalesce 연산자 "??" (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로 업그레이드하자마자 사용할 것입니다.


12

널 입력 가능 리턴 유형

PHP 7은 리턴 타입 선언에 대한 지원을 추가합니다. 인수 유형 선언과 마찬가지로 반환 유형 선언은 함수에서 반환 될 값 유형을 지정합니다. 인수 유형 선언에 사용 가능한 것과 동일한 유형이 리턴 유형 선언에 사용 가능합니다.

엄격한 타이핑은 리턴 타입 선언에도 영향을줍니다. 기본 약한 모드에서는 반환 된 값이 해당 유형이 아닌 경우 올바른 유형으로 강제 변환됩니다. 강력한 모드에서 반환 된 값은 올바른 유형이어야합니다. 그렇지 않으면 TypeError가 발생합니다.

PHP 7.1.0부터 타입 이름 앞에 물음표 (?)를 붙여서 반환 값을 nullable로 표시 할 수 있습니다. 이는 함수가 지정된 유형 또는 NULL을 리턴 함을 나타냅니다.

<?php
function get_item(): ?string {
    if (isset($_GET['item'])) {
        return $_GET['item'];
    } else {
        return null;
    }
}
?>

출처


7

Splat 연산자로서의 세 가지 DOTS (...) (PHP 5.6부터)

PHP에는 "..."(세 개의 점) 연산자가 있으며이를 Splat 연산자라고합니다. 함수에서 임의의 수의 매개 변수를 전달하는 데 사용되며이 유형의 함수를 Variadic Functions라고합니다. "..."(세 개의 점)을 사용하는 예를 들어 보자.

예 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
?>

calculateNumbers () 함수의 각 인수는 "…"를 사용할 때 $ 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

?>

0

?-> NullSafe 연산자

현재로서는 제안 일 뿐이며 여기에서 찾을 수 있습니다 . 그것은이다 NullSafe Operator, 그것은 반환 null경우에 당신은에서 값을 함수를 호출하거나 얻으려고 null... 예

$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; //return null
$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object

이것을 추가하면 다소 이른 느낌이 들며, 아무도이 코드를 라이브 코드에서 보지 못하며 추가되지 않을 수도 있습니다. 세부 사항이 완료 될 때까지 기다렸다가 올바르게 문서화하는 것이 좋습니다.
IMSoP

우리는 이미 그것에 대해 질문을 받고 있습니다. : / 제안이 실패하면 우리는 이것이 가치가 있는지 결정할 수 있습니다.
John Conde

@JohnConde 참조? 이것이 내가 말한 것입니다 ...
Berto99

@JohnConde 나는 그것들이 가상 프로그래밍 언어를 요구하고 있기 때문에 그것들을 주 제외로 닫으려고 유혹하고있다. 또는 "이 질문은 타임 라인의 다른 부분에 속해 있습니다. 타임머신의 설정을 확인하십시오";)
IMSoP

lol 생각은 내 마음을 넘어 나는 이것이 미래의 방문객들에게 가치를 제공 할 수 있는지 스스로에게 물었고, 지금은 그 대답이 "예"입니다. 그러나 그것은 변할 수 있습니다 ...
John Conde

0

php8 이후 NullSafe 연산자 "?->"(아마도)

현재로서는 제안 일뿐 입니다. 여기에 링크 설명을 입력하십시오 . ?->그것은이다 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
?>

이것을 추가하면 다소 이른 느낌이 들며, 아무도이 코드를 라이브 코드에서 보지 못하며 추가되지 않을 수도 있습니다. 세부 사항이 완료 될 때까지 기다렸다가 올바르게 문서화하는 것이 좋습니다.
IMSoP

@IMSoP 나는 당신과 함께 있지만, 내가 그렇게하도록 초대되었습니다 여기 stackoverflow.com/questions/62178354/… ...
Berto99

이제 이것에 대해 두 가지 답변이있는 것 같습니다. 개인적으로, 나는 지금 그런 연산자가 없기 때문에 대답하려고하지 않고 다른 질문을 끝내기로 투표했을 것입니다.
IMSoP

@IMSoP C ++ 제안에 대한 StackOverflow에 대한 많은 질문이 있으며 닫히지 않았습니다. 그럼에도 불구하고,이 연산자를 지금 당장 게시하지 않을 것에 대해 귀하와 함께 있습니다
Berto99

나는 C ++ 프로세스에 대해 많이 알지 못하고 제안을 논의하는 것이 합리적 일 때 이것이 공정 수정에 성공할 가능성이 높지만 일반적으로 PHP에 제안 된 많은 기능이 있습니다. 사용자가 참조 목록에서 모든 언어를 접하는 것은 다소 혼란 스러울 수 있습니다. 즉, 나는 부분적으로 여기에 심술쟁이 노인이되고있다 : P
IMSoP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.