PHP는 T_PAAMAYIM_NEKUDOTAYIM을 기대합니까?


542

누구 T_PAAMAYIM_NEKUDOTAYIM있나요?


22
때때로 이것은 $ 기호가 없다는 것을 알려주는 PHP의 방법입니다. 예를 들어 $ _SESSION [ "foo"] 대신 _SESSION [ "foo"]를 쓰는 경우
Gonzo

131
이중 이중 콜론은 히브리어이지만 ... bugs.php.net/bug.php?id=14492 참조 : "BTW, 구문 분석 오류에서 철자가 틀리면 T_PAAMAYIM_NEKUDATAYIM이어야합니다 (히브리어에서는 'double' 형식은 원래 명사 + 'ayim'접미사이고 'nekuda'는 단일 형식입니다 [ 'nekudot'는 복수형입니다]). "
Wolfgang Fahl

66
@ WalfgangFahl 나는 그 오류에 대해 뭔가 잘못되었다는 것을 알았습니다.
피터 터너

14
@WolfgangFahl 철자 실수는 실종 u입니다. 이어야합니다 T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "twice", NEKUDOTAYIM= := "נקודותיים")
Tom

15
이 오류를 보았을 때 방금 약 30 초 동안 화면에서 벙어리를 쳐다보고 웃으면 서 담배를 피 우러 갔다. : F 1+
n00b

답변:


342

이중 콜론 연산자입니다 ::( 구문 분석기 토큰 목록 참조 ).


11
실제로는 아닙니다. 이것을 테스트var_dump(empty(TRUE))
machineaddict

1
@machineaddict 질문 / 답변이 잘못 되었습니까?
Gumbo

2
아니요. 방금 동일한 T_PAAMAYIM_NEKUDOTAYIM을 반환하는 평가를 추가했습니다. 실수로 찾았습니다.
machineaddict

6
@Web_Developer에서 발생하는 이유 는 구문 상 유효한 명령문 foreach($cats as cat뒤에 유일하게 허용되는 문자 cat가있는 ::경우이라는 클래스의 정적 특성을 지정할 수 있기 때문에 cat. 경우 예는 cat클래스라는 공공 정적 멤버를 가지고 $mouse, 다음 foreach($cats as cat::$mouse)완벽하게 유효 php하지만, 이외의 아무것도 성명 ::애프터는 cat구문 오류 일 것이다. $mouse선언 된 속성이 아닌 경우 cat치명적인 오류가 발생하지만 구문 오류는 발생하지 않습니다.
chiliNUT

2
var_dump (empty (TRUE)), PHP 7.2에서 bool (false) 반환
프로그래머 Dancuk

110

구글은 놀라운 일을한다.

"이중 콜론" 의 히브리어 입니다.


3
모든 언어의 오류, 커밋, 구문을 받아들이는 새로운 언어는 어떻습니까? :) 우린 할 수있어.
헥터

2
구글이 나를 여기로 데려왔다.
Sumit

2
israelis php :)
sd1sd1

@ sd1sd1, 그렇습니다. 아마도 Zeev가 썼을 것입니다
peterchaula

53

::PHP 에서 연산자 의 이름입니다 . 문자 그대로 "이중 콜론"을 의미합니다. 어떤 이유로 그들은 그것을 히브리어로 명명했습니다. 코드 구문을 확인하고 ::적절한 위치에 :-)


1
함수는 영어이지만 오류는 히브리어입니다. 그래도 다른 오류가 히브리어로 확실하지 않습니다.
alex

19
하이라이트 문자열은 להדגיש מחרוזת입니다. 이제부터는 히브리어 문자로만 사용자 정의 array_push 함수 לדחוף_מערך 만 사용할 것입니다. 나는 비 히브리어를 사용하는 모든 동료들이 그것을 좋아할 것이라고 확신합니다. 거의 모든 개발자 팀이 비 라틴 문자로 작성된 적어도 하나의 언어를 사용합니다. 재미 있음 :)
Isaac Isaac

3
그것이 히브리어로 된 이유는 이스라엘 사람들이 코드를 작성했기 때문입니다. 나는 그들이 그 오류를 놓쳤다 고 생각하지 않습니다.
Raul

5
@Raul Ok, 다음 프로젝트에서는 이탈리아어로 오류 코드를 작성하겠습니다. 이탈리아어입니다! 어디에서 영어를 기대하십니까? :-)
Gianluca Ghettini

@Ilya Birman 문자 그대로 "이중 콜론"을 의미하지는 않습니다. 말 그대로 "두 번, 두 번 점"을 의미
Sapphire_Brick

47

에서 위키 백과 :

PHP에서 스코프 해상도 연산자는 Paamayim Nekudotayim (히브리어에서 "이중 콜론"을 의미하는 히브리어 : פעמיים נקודתיים)이라고도합니다.

"Paamayim Nekudotayim"이라는 이름은 PHP 3에서 사용되는 이스라엘에서 개발 한 Zend Engine 0.5에서 도입되었습니다. 히브리어를 사용하지 않는 많은 개발자들에게는 혼란 스럽지만이 샘플 오류 메시지 에서처럼 여전히 PHP 5에서 사용되고 있습니다. :

$ php -r :: 구문 분석 오류 : 구문 오류, 예기치 않은 T_PAAMAYIM_NEKUDOTAYIM

PHP 5.4부터, 범위 확인 연산자와 관련된 오류 메시지에는 여전히이 이름이 포함되어 있지만 그 의미는 다소 명확 해졌습니다.

$ php -r :: 구문 분석 오류 : 구문 오류, 예기치 않은 '::'(T_PAAMAYIM_NEKUDOTAYIM)

에서 공식 PHP 문서 :

Scope Resolution Operator (Paamayim Nekudotayim이라고도 함) 또는 더 간단한 용어 인 이중 콜론은 클래스의 정적, 상수 및 재정의 된 속성 또는 메서드에 액세스 할 수있는 토큰입니다.

클래스 정의 외부에서 이러한 항목을 참조 할 때는 클래스 이름을 사용하십시오.

PHP 5.3.0부터는 변수를 사용하여 클래스를 참조 할 수 있습니다. 변수의 값은 키워드가 될 수 없습니다 (예 : self, parent 및 static).

Paamayim Nekudotayim은 처음에는 이중 콜론을 명명하기위한 이상한 선택처럼 보입니다. 그러나 Zend Engine 0.5 (PHP 3를 지원하는)를 작성하는 동안 Zend 팀이이를 결정했습니다. 실제로 이중 콜론을 의미합니다-히브리어!


1
실제로 구어체 히브리어입니다. Wikipedia는 이제 다음과 같이 말합니다. "PHP에서 스코프 해상도 연산자는 Paamayim Nekudotayim (히브리어 : פעמיים נקודותיים이라고도 함)이라고 발음합니다. "히브리어로"
mic

11

empty () 함수에 PHP 상수를 적용 할 때도옵니다 :

if (!empty(SOME_CONSTANT)) {

}

그게 내 사건이야 이것을 사용하여 해결했습니다.

$string = SOME_CONSTANT;
if (!empty($string)) {

}

2
상수가 비어있는 이유는 무엇입니까?
당황하지 마십시오

1
좋은 질문 : 이것은 예를 들어 다른 사람들 이이 오류 상황에 처한 경우 가능하다는 것을 보여줍니다. :)
Max

6
@ 당황하지 마십시오 : 왜 안됩니까? empty ()는 변수가 존재하는지뿐만 아니라 그 값이 "empty"인지 테스트합니다 (PHP의 경우 0도 비어 있습니다). 이러한 상수는 DB 설정 또는 일부 true / false 값과 같이 사용자가 변경해야하는 값을 나타내며 코드 개발자가 디자인 타임에 알 수없는 다른 값 유형을 나타낼 수 있습니다. 이것은 API 또는 코드 프레임 워크에 공통입니다. 젠드 파서 개발자가 왜 모든 사람들이 알고 이해하는 공통 단어를 사용하지 않고 일부 히브리어 단어를 사용했는지 이해하지 못합니다. 내 말은, 정말 재미 있지도 않습니다.
StanE

구성 파일에서 상수를 사용하고 특정 상수가 비어있는 경우 코드에서 알고 싶습니다 (null, false, 0, 빈 문자열, emty 배열 ...). 수동으로 모두 테스트해야합니까? WTF
qdev

5

나는 히브리어를 아주 잘 알고 있으므로, "Paamayim Nekudotayim"이라는 이름을 명확히하기 위해, 그 의미는 "이중 콜론"이지만 문자 그대로 번역됩니다.

  • "Paamayim"은 "2"또는 "두 번"을 의미합니다
  • "네 쿠도 타이 임"은 "점"을 의미한다 (점등. "구멍")
    • 히브리어로 네 쿠다 점을 의미합니다.
    • 복수는 네쿠 도트 . 즉, 모음처럼 행동하는 점은 영어로합니다.
    • 이 Nekudo- 불리는 이유는 그것이 tayim는 "-ayim"접미사는 "두"또는 "두 번"하지만 일반적으로 두 객체가 아닌 두 가지 작업을 의미한다 따라서 의미하기 때문이다 ::보다 "두 번, 두 개의 점"을 의미하거나, 일반적으로 범위 확인 연산자라고 합니다.

2

이것은 다음을 사용할 때 foreachs에서 발생할 수 있습니다.

foreach( $array as $key = $value )

대신에

foreach( $array as $key => $value )

1

나에게 이것은 클래스 함수 내에서 일어났다.

PHP 5.3 이상 $this::$defaults 작동했습니다. 어떤 이유로 든 더 낮은 버전 번호를 가진 서버로 코드를 서버로 교체했을 때이 오류가 발생했습니다.

필자의 경우 해결책 self$this다음 대신 키워드를 사용하는 것이 었습니다 .

self::$defaults 잘 작동합니다.


그는나요 질문 에 대해 $this, 또는 무슨 일이 일어난 당신 ?
Sapphire_Brick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.