PHP mengharapkan T_PAAMAYIM_NEKUDOTAYIM?

543

Apakah ada yang punya T_PAAMAYIM_NEKUDOTAYIM?

Peter Turner
sumber
22
Terkadang ini adalah cara PHP untuk memberi tahu Anda bahwa Anda kehilangan tanda $ ... misalnya jika Anda menulis _SESSION ["foo"] alih-alih $ _SESSION ["foo"]
Gonzo
131
ibrani untuk usus ganda ganda, tapi ... lihat bugs.php.net/bug.php?id=14492 : "BTW, ada kesalahan ejaan dalam kesalahan parse, seharusnya T_PAAMAYIM_NEKUDATAYIM (dalam bahasa Inggris, 'ganda' form hanyalah nomina asli + akhiran 'ayim' dan 'nekuda' adalah bentuk tunggal ['nekudot' adalah bentuk jamak]). "
Wolfgang Fahl
66
@ WolfgangFahl Saya tahu sesuatu tentang kesalahan itu sepertinya salah.
Peter Turner
14
@ WolfgangFahl kesalahan ejaan hanya hilang u. Seharusnya begitu T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "dua kali", NEKUDOTAYIM= := "נקודותיים")
Tom
15
Ketika saya melihat kesalahan ini, saya hanya menatap ke arah layar dengan dumbstruck selama 30 detik kemudian tertawa terbahak-bahak dan mulai mengisap ciggarette: F 1+
n00b

Jawaban:

343

Ini operator usus besar ganda ::(lihat daftar token parser ).

Gumbo
sumber
11
Tidak juga. Uji inivar_dump(empty(TRUE))
machineaddict
1
@machineaddict Pertanyaan / jawaban salah?
Gumbo
2
Tidak. Saya baru saja menambahkan evaluasi yang mengembalikan T_PAAMAYIM_NEKUDOTAYIM yang sama. Saya menemukannya secara tidak sengaja.
machineaddict
6
@ Web_Developer, alasan yang terjadi adalah karena jika Anda memiliki satu foreach($cats as cat-satunya karakter yang dapat diterima setelah catpernyataan sintaksis yang valid adalah a ::, karena itu akan memungkinkan Anda untuk menentukan properti statis dari beberapa kelas yang disebut cat. Misalnya, jika catkelas memiliki anggota statis publik yang dipanggil $mouse, maka foreach($cats as cat::$mouse)itu benar-benar valid php, tetapi pernyataan dengan apa pun selain ::setelah itu catakan menjadi kesalahan sintaksis. Jika $mousebukan properti yang dideklarasikan dari catAnda, Anda akan mendapatkan kesalahan fatal, tetapi masih bukan kesalahan sintaksis.
chiliNUT
2
var_dump (kosong (BENAR)), cukup kembalikan bool (salah) di PHP 7.2
Programmer Dancuk
109

Google melakukan keajaiban.

Ini bahasa Ibrani untuk "usus ganda".

patricksweeney
sumber
3
@MattiVirkkunenBagaimana dengan bahasa baru yang menerima kesalahan, komit, sintaksis dalam bahasa apa pun? :) kita bisa melakukannya.
Hector
2
Google membawa saya ke sini.
Sumit
2
israelis menulis php :)
sd1sd1
@ sd1sd1, yeah, mungkin Zeev yang menulis itu
peterchaula
53

Itu nama untuk ::operator di PHP. Secara harfiah berarti "usus ganda". Untuk beberapa alasan mereka menamainya dalam bahasa Ibrani. Periksa sintaksis kode Anda, dan letakkan yang ::sesuai :-)

Ilya Birman
sumber
1
Fungsinya dalam bahasa Inggris, tetapi kesalahan itu dalam bahasa Ibrani. Saya tidak yakin apakah ada kesalahan lain dalam bahasa Ibrani.
alex
19
Sorot string adalah להדגיש מחרוזת. Mulai sekarang, saya hanya akan menggunakan fungsi array_push khusus saya לדחוף_מערך dalam karakter Ibrani, tentu saja. Saya yakin semua rekan kerja non-Ibrani saya akan menyukainya. Hampir semua tim pengembang kami berbicara setidaknya satu bahasa yang ditulis dalam karakter non-latin. Harus menyenangkan :)
Isaac
3
Alasan mengapa itu dalam bahasa Ibrani adalah karena kode itu ditulis oleh orang Israel. Saya tidak berpikir mereka melewatkan kesalahan itu, Mereka membiarkannya di sana tidak diterjemahkan sebagai pengingat.
Raul
5
@ Raul Ok, jadi pada proyek saya berikutnya saya akan menulis beberapa kode kesalahan dalam bahasa Italia, saya orang Italia! Apa yang Anda harapkan, bahasa Inggris di mana-mana? :-)
Gianluca Ghettini
@Ilya Birman Ini tidak secara harfiah berarti "usus besar ganda"; ini secara harfiah berarti "dua kali, titik ganda"
Sapphire_Brick
47

Dari Wikipedia :

Dalam PHP, operator resolusi ruang lingkup juga disebut Paamayim Nekudotayim (Bahasa Ibrani: פעמיים נקודתיים), yang berarti "usus ganda" dalam bahasa Ibrani.

Nama "Paamayim Nekudotayim" diperkenalkan di Zend Engine 0.5 yang dikembangkan Israel yang digunakan dalam PHP 3. Meskipun telah membingungkan bagi banyak pengembang yang tidak berbicara bahasa Ibrani, masih digunakan dalam PHP 5, seperti dalam contoh pesan kesalahan ini :

$ php -r :: Parse error: kesalahan sintaksis, tak terduga T_PAAMAYIM_NEKUDOTAYIM

Pada PHP 5.4, pesan kesalahan mengenai operator resolusi lingkup masih menyertakan nama ini, tetapi telah sedikit menjelaskan artinya:

$ php -r :: Parse error: kesalahan sintaksis, tak terduga '::' (T_PAAMAYIM_NEKUDOTAYIM)

Dari dokumentasi PHP resmi :

Operator Penyelesaian Ruang Lingkup (juga disebut Paamayim Nekudotayim) atau dalam istilah yang lebih sederhana, tanda titik dua, adalah token yang memungkinkan akses ke properti atau metode statis, konstan, dan yang dikesampingkan dari suatu kelas.

Saat mereferensikan item-item ini dari luar definisi kelas, gunakan nama kelas.

Pada PHP 5.3.0, dimungkinkan untuk mereferensikan kelas menggunakan variabel. Nilai variabel tidak boleh berupa kata kunci (mis. Mandiri, orang tua, dan statis).

Paamayim Nekudotayim akan, pada awalnya, tampak seperti pilihan aneh untuk penamaan dua-titik dua. Namun, saat menulis Mesin Zend 0,5 (yang mendukung PHP 3), itulah yang tim Zend memutuskan untuk menyebutnya. Ini sebenarnya berarti double-colon - dalam bahasa Ibrani!

John Slegers
sumber
1
Ini sebenarnya bahasa Ibrani sehari-hari. Wikipedia sekarang mengatakan: "Dalam PHP, operator resolusi ruang lingkup juga disebut Paamayim Nekudotayim (Bahasa Ibrani: פעמיים נקודותיים, diucapkan [paʔaˈmajim nəkudoˈtajim], kata kedua sebagai bahasa sehari-hari korupsi נקודתיים, diucapkan sebagai kata ganti ganda yang berarti" ganda ") "Dalam bahasa Ibrani."
mik
11

Ini juga datang ketika Anda menerapkan konstanta di PHP ke fungsi kosong ():

if (!empty(SOME_CONSTANT)) {

}

Itu kasus saya. Saya menyelesaikannya dengan menggunakan ini:

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

}
Maks
sumber
2
Mengapa sebuah konstanta kosong?
Jangan Panik
1
Pertanyaan Bagus: Ini hanya sebagai contoh jika ada orang lain yang masuk dalam situasi kesalahan ini, saya hanya menunjukkan bahwa itu juga mungkin :)
Max
6
@ Don't Panic: Kenapa tidak? kosong () tidak hanya menguji apakah ada variabel, tetapi juga jika nilainya "kosong" (dalam hal PHP nol (0) juga kosong). Konstanta seperti itu dapat mewakili nilai yang dimaksudkan untuk diubah oleh pengguna - seperti pengaturan DB atau nilai benar / salah dan tipe nilai lainnya yang tidak diketahui pengembang kode pada waktu desain. Ini umum untuk API atau kerangka kerja kode. Saya hanya tidak mengerti mengapa pengembang parser Zend tidak menggunakan kata umum yang semua orang tahu dan mengerti tetapi sebaliknya beberapa kata ibrani. Maksudku, itu bahkan tidak terlalu lucu.
StanE
Saya menggunakan konstanta dalam file konfigurasi, dan saya ingin tahu dalam kode jika konstanta tertentu kosong (null, false, 0, string kosong, array emty ....). Haruskah saya menguji semuanya secara manual? WTF
qdev
6

Saya tahu bahasa Ibrani dengan cukup baik, sehingga untuk memperjelas nama "Paamayim Nekudotayim" untuk Anda, makna yang diparafrasekan adalah "usus ganda", tetapi diterjemahkan secara harfiah:

  • "Paamayim" berarti "dua" atau "dua kali"
  • "Nekudotayim" berarti "titik" (lit. "lubang")
    • Dalam bahasa Ibrani, a nekuda berarti titik.
    • Bentuk jamak adalah nekudot , yaitu, titik-titik yang bertindak seperti vokal lakukan dalam bahasa Inggris.
    • Alasan mengapa itu disebut Nekudo- tayim adalah karena akhiran "-ayim" juga berarti "dua" atau "dua kali", tetapi biasanya berarti dua objek daripada dua tindakan, dengan demikian ::menunjukkan "dua kali, dua titik", atau lebih umumnya dikenal sebagai Operator Penyelesaian Ruang Lingkup .
Sapphire_Brick
sumber
2

Ini dapat terjadi pada foreachs saat menggunakan:

foreach( $array as $key = $value )

dari pada

foreach( $array as $key => $value )
GDY
sumber
1

Bagi saya ini terjadi dalam fungsi kelas.

Dalam PHP 5.3 dan di atasnya $this::$defaults berfungsi dengan baik; ketika saya menukar kode ke server yang karena alasan apa pun memiliki nomor versi yang lebih rendah melemparkan kesalahan ini.

Solusinya, dalam kasus saya, adalah menggunakan kata kunci selfalih-alih $this:

self::$defaults berfungsi dengan baik.

bozdoz
sumber
Apakah dia bertanya tentang $this, atau apa yang terjadi pada Anda ?
Sapphire_Brick