PHP mong đợi T_PAAMAYIM_NEKUDOTAYIM?


542

Có ai có một T_PAAMAYIM_NEKUDOTAYIM?


22
Đôi khi, đây là cách của PHP để nói với bạn rằng bạn đang thiếu ký hiệu $ ... ví dụ: nếu bạn viết _SESSION ["foo"] thay vì $ _SESSION ["foo"]
Gonzo

131
hebrew cho dấu hai chấm kép, nhưng ... xem bug.php.net/orms.php?id=14492 : "BTW, có một lỗi chính tả trong lỗi phân tích cú pháp, đó phải là T_PAAMAYIM_NEKUDATAYIM (trong hebrew, 'double' form chỉ là danh từ gốc + hậu tố 'ayim' và 'nekuda' là dạng đơn ['nekudot' là dạng số nhiều]). "
Wolfgang Fahl

66
@WolfgangFahl Tôi biết điều gì đó về lỗi đó có vẻ không ổn.
Peter Turner

14
@WolfgangFahl lỗi chính tả chỉ là thiếu u. Nó phải T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "Hai lần", NEKUDOTAYIM= := "נקודותיים")
Tom

15
Khi tôi thấy lỗi này, tôi chỉ nhìn chằm chằm vào màn hình trong 30 giây rồi cười phá lên và hút một điếu xì gà: F 1+
n00b

Câu trả lời:


342

Đó là toán tử dấu hai chấm ::(xem danh sách mã thông báo trình phân tích cú pháp ).


11
Không hẳn vậy. Kiểm tra cái nàyvar_dump(empty(TRUE))
machineaddict

1
@machineaddict Câu hỏi / câu trả lời sai?
Gumbo

2
Không. Tôi vừa thêm một đánh giá trả về cùng T_PAAMAYIM_NEKUDOTAYIM. Tôi tìm thấy nó do nhầm lẫn.
máy móc

6
@Web_Developer, lý do xảy ra là vì nếu bạn có một foreach($cats as catký tự duy nhất được chấp nhận sau catcâu lệnh hợp lệ cú pháp là a ::, vì nó sẽ cho phép bạn chỉ định một thuộc tính tĩnh của một số lớp được gọi cat. Ví dụ, nếu catlớp có một thành viên tĩnh công khai được gọi $mouse, thì foreach($cats as cat::$mouse)hoàn toàn hợp lệ php, nhưng một câu lệnh với bất cứ điều gì khác ::sau catđó sẽ là một lỗi cú pháp. Nếu $mousekhông phải là một tài sản được khai báo của catbạn sẽ có một lỗi nghiêm trọng, nhưng vẫn không phải là một lỗi cú pháp.
chiliNUT

2
var_dump (trống (TRUE)), chỉ cần trả về bool (false) trong PHP 7.2
Lập trình viên Dancuk

110

Google làm việc kỳ diệu.

Đó là tiếng Do Thái có nghĩa là "dấu hai chấm".


3
@MattiVirkkunen Còn một ngôn ngữ mới chấp nhận bất kỳ lỗi, cam kết, cú pháp trong bất kỳ ngôn ngữ nào? :) chúng ta có thể làm được.
Hector

2
Google đưa tôi đến đây.
Sumit

2
israelis đã viết php :)
sd1sd1

@ sd1sd1, vâng, có lẽ Zeev đã viết điều đó
peterchaula

53

Đó là một tên cho ::toán tử trong PHP. Nó có nghĩa đen là "dấu hai chấm". Vì một số lý do, họ đặt tên theo tiếng Do Thái. Kiểm tra cú pháp mã của bạn và đặt một ::nơi thích hợp :-)


1
Các chức năng bằng tiếng Anh, nhưng lỗi đó là bằng tiếng Do Thái. Tôi không chắc chắn nếu có bất kỳ lỗi nào khác trong tiếng Do Thái.
alex

19
Chuỗi nổi bật là להדגלהדגש Từ giờ trở đi, tôi sẽ chỉ sử dụng hàm Array_push tùy chỉnh của mình לדח TOUR _מע ž trong các ký tự tiếng Do Thái, tất nhiên. Tôi chắc rằng tất cả đồng nghiệp không nói tiếng Do Thái của tôi sẽ thích nó. Tất cả về đội ngũ phát triển của chúng tôi nói ít nhất một ngôn ngữ được viết bằng các ký tự không phải là tiếng Latin. Nên vui vẻ :)
Isaac

3
Lý do tại sao nó bằng tiếng Do Thái là bởi vì mã được viết bởi người Israel. Tôi không nghĩ rằng họ đã bỏ qua lỗi đó, Họ đã để nó ở đó chưa được dịch như một lời nhắc nhở.
Raul

5
@Raul Ok, vì vậy trong dự án tiếp theo của tôi, tôi sẽ viết một số mã lỗi bằng tiếng Ý, tôi là người Ý! Bạn mong đợi điều gì, tiếng Anh ở khắp mọi nơi? :-)
Gianluca Ghettini

@Ilya Birman Nó không có nghĩa đen là "dấu hai chấm"; nó có nghĩa đen là "hai lần, hai lần"
Sapphire_Brick

47

Từ Wikipedia :

Trong PHP, toán tử phân giải phạm vi cũng được gọi là Paamayim Nekudotayim (tiếng Do Thái: tiếng פעמפעמ

Tên "Paamayim Nekudotayim" đã được giới thiệu trong Zend Engine 0.5 do Israel phát triển được sử dụng trong PHP 3. Mặc dù nó đã gây nhầm lẫn cho nhiều nhà phát triển không nói tiếng Do Thái, nhưng nó vẫn được sử dụng trong PHP 5, như trong thông báo lỗi mẫu này :

$ php -r :: Lỗi phân tích cú pháp: lỗi cú pháp, T_PAAMAYIM_NEKUDOTAYIM không mong muốn

Kể từ phiên bản PHP 5.4, các thông báo lỗi liên quan đến toán tử phân giải phạm vi vẫn bao gồm tên này, nhưng đã làm rõ phần nào ý nghĩa của nó:

$ php -r :: Lỗi phân tích cú pháp: lỗi cú pháp, không mong muốn '::' (T_PAAMAYIM_NEKUDOTAYIM)

Từ tài liệu PHP chính thức :

Toán tử phân giải phạm vi (còn được gọi là Paamayim Nekudotayim) hoặc nói một cách đơn giản hơn, dấu hai chấm, là một mã thông báo cho phép truy cập vào các thuộc tính hoặc phương thức tĩnh, không đổi và bị ghi đè của một lớp.

Khi tham chiếu các mục này từ bên ngoài định nghĩa lớp, sử dụng tên của lớp.

Kể từ phiên bản PHP 5.3.0, có thể tham chiếu lớp bằng một biến. Giá trị của biến không thể là một từ khóa (ví dụ: self, Parent và static).

Paamayim Nekudotayim, thoạt đầu, có vẻ như là một lựa chọn kỳ lạ để đặt tên cho một dấu hai chấm. Tuy nhiên, trong khi viết Zend Engine 0.5 (hỗ trợ PHP 3), đó là điều mà nhóm Zend quyết định gọi nó. Nó thực sự có nghĩa là hai dấu hai chấm - trong tiếng Do Thái!


1
Đó thực sự là tiếng Do Thái thông tục. Wikipedia bây giờ nói: "Trong tiếng PHP, toán tử phân giải phạm vi còn được gọi là Paamayim Nekudotayim (tiếng Do Thái: tiếng Hy Lạp: tiếng Hy Lạp, phát âm là [paʔaˈmajim nəkudoˈtajim], từ thứ hai là một từ tham nhũng. Người Do Thái trong tiếng Do Thái. "
mic

11

Điều này cũng đến khi bạn áp dụng một hằng trong PHP cho hàm rỗng ():

if (!empty(SOME_CONSTANT)) {

}

Đó là trường hợp của tôi. Tôi đã giải quyết nó bằng cách sử dụng điều này:

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

}

2
Tại sao một hằng số sẽ trống rỗng?
Đừng hoảng sợ

1
Câu hỏi hay: Đây chỉ là ví dụ nếu một số người khác gặp phải tình huống lỗi này, tôi chỉ cho thấy nó cũng có thể xảy ra :)
Max

6
@ Đừng hoảng sợ: Tại sao không? trống () không chỉ kiểm tra nếu một biến tồn tại mà còn nếu giá trị của nó là "trống" (trong trường hợp PHP thì số 0 (0) cũng trống). Một hằng số như vậy có thể đại diện cho một giá trị được thay đổi bởi người dùng - như cài đặt DB hoặc một số giá trị đúng / sai và các loại giá trị khác mà nhà phát triển mã không biết tại thời điểm thiết kế. Điều này là phổ biến cho các API hoặc khung mã. Tôi chỉ không hiểu tại sao các nhà phát triển trình phân tích cú pháp Zend không sử dụng một từ phổ biến mà mọi người đều biết và hiểu mà thay vào đó là một số từ hebrew. Ý tôi là, nó thậm chí không thực sự hài hước.
StanE 6/03/2015

Tôi sử dụng các hằng số trong các tệp cấu hình và tôi muốn biết trong mã nếu một hằng số cụ thể là trống (null, false, 0, chuỗi rỗng, mảng emty ....). Tôi có nên kiểm tra chống lại tất cả chúng bằng tay không? WTF
qdev

5

Tôi biết tiếng Hê-bơ-rơ khá rõ, vì vậy để làm rõ tên "Paamayim Nekudotayim" cho bạn, ý nghĩa được diễn giải là "dấu hai chấm", nhưng được dịch theo nghĩa đen:

  • "Paamayim" có nghĩa là "hai" hoặc "hai lần"
  • "Nekudotayim" có nghĩa là "dấu chấm" (lit. "lỗ")
    • Trong tiếng Do Thái, nekuda có nghĩa là một dấu chấm.
    • Số nhiều là nekudot , tức là các dấu chấm hoạt động như nguyên âm làm trong tiếng Anh.
    • Lý do tại sao nó được gọi là Nekudo- tayim là vì hậu tố "-ayim" cũng có nghĩa là "hai" hoặc "hai lần", nhưng nó thường có nghĩa là hai đối tượng chứ không phải hai hành động, do đó ::biểu thị "hai lần, hai dấu chấm" hoặc nhiều hơn thường được gọi là toán tử phân giải phạm vi .

2

Điều này có thể xảy ra trên các bài giảng khi sử dụng:

foreach( $array as $key = $value )

thay vì

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

1

Đối với tôi điều này đã xảy ra trong một chức năng lớp.

Trong PHP 5.3 trở lên $this::$defaults hoạt động tốt; Khi tôi đổi mã vào một máy chủ mà vì bất kỳ lý do gì có số phiên bản thấp hơn, nó đã gây ra lỗi này.

Giải pháp, trong trường hợp của tôi, là sử dụng từ khóa selfthay vì $this:

self::$defaults hoạt động tốt


Anh ấy đã hỏi về $this, hoặc những gì đã xảy ra với bạn ?
Sapphire_Brick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.