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 (на івриті" подвійний " форма - лише оригінальний іменник + суфікс 'ayim', а 'nekuda' - це єдина форма ['nekudot' - форма множини]). "
Вольфганг Фал

66
@WolfgangFahl Я знав щось про цю помилку, здавалося, не так.
Пітер Тернер

14
@WolfgangFahl орфографічна помилка лише відсутня u. Це повинно бути T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "Двічі", NEKUDOTAYIM= := "נקודותיים")
Том

15
Коли я побачив цю помилку, я просто дивився на гантелі екрана десь 30 секунд, потім засміявся і пішов палити сигарету: F 1+
n00b

Відповіді:


342

Це оператор подвійної двокрапки ::(див. Перелік лексем парсера ).


11
Не зовсім. Перевірте цеvar_dump(empty(TRUE))
вердикт машинного рішення

1
@machineaddict Неправильне питання / відповідь?
Гумбо

2
Ні. Я щойно додав оцінку, яка повертає той самий T_PAAMAYIM_NEKUDOTAYIM. Я знайшов це помилково.
машинобудівний вирок

6
@Web_Developer, причина, що трапляється, полягає в тому, що якщо у вас foreach($cats as catєдиний прийнятний символ після catсинтаксично допустимого оператора є a ::, це дозволить вам вказати статичну властивість класу, який називається cat. Наприклад, якщо у catкласу є публічний статичний член, який називається $mouse, то foreach($cats as cat::$mouse)він цілком дійсний php, але заява з будь-яким іншим, ніж ::після cat, буде помилкою синтаксису. Якби $mouseне задекларована властивість, catви отримали б фатальну помилку, але все ж не синтаксичну помилку.
chiliНУ

2
var_dump (порожній (TRUE)), просто поверніть bool (false) у PHP 7.2
Програміст Dancuk

110

Google творить чудеса.

Це іврит для "подвійної двокрапки".


3
@MattiVirkkunenЩо про нову мову, яка приймає будь-які помилки, допущення, синтаксис будь-якою мовою? :) ми можемо це зробити.
Гектор

2
Google привів мене сюди.
Sumit

2
israelis написав php :)
sd1sd1

@ sd1sd1, так, це, мабуть, Зеєв написав це
peterchaula

53

Це ім'я ::оператора в PHP. Це буквально означає «подвійне двокрапку». Чомусь вони назвали його на івриті. Перевірте синтаксис свого коду та введіть, ::де це доречно :-)


1
Функції є англійською мовою, але ця помилка є на івриті. Я не впевнений, чи є якісь інші помилки в івриті.
alex

19
Рядок виділення - це להדגיש מחרוזת. Відтепер я використовуватиму лише свою власну функцію array_push לדחוף_מערך лише на івриті. Я впевнений, що всі мої колеги, які не говорять на івриті, сподобаються. Майже про всю нашу команду розробників розмовляють принаймні однією мовою, написаною не латинськими символами. Має бути весело :)
Ісаак

3
Причина, чому це на івриті, полягає в тому, що код написали ізраїльтяни. Я не думаю, що вони пропустили цю помилку, вони залишили її неперекладеною як нагадування.
Рауль

5
@Raul Добре, тож на наступному проекті я напишу код помилки італійською мовою, я італійський! Що ви очікуєте, англійська всюди? :-)
Gianluca Ghettini

@Ilya Birman Це не означає буквально "подвійну двокрапку"; це буквально означає "два рази, подвійні крапки"
Sapphire_Brick

47

З Вікіпедії :

У PHP оператором роздільної здатності називається також Paamayim Nekudotayim (іврит: פעמיים נקודתיים), що на івриті означає "подвійний двокрапку".

Назва "Paamayim Nekudotayim" була введена в розробленому в Ізраїлі Zend Engine 0.5, який використовується в PHP 3. Хоча це бентежить багатьох розробників, які не говорять на івриті, воно все ще використовується в PHP 5, як у цьому прикладі повідомлення про помилку :

$ php -r :: Помилка розбору: помилка синтаксису, несподівана T_PAAMAYIM_NEKUDOTAYIM

Станом на PHP 5.4, повідомлення про помилки, що стосуються оператора вирішення сфери, все ще містять це ім'я, але дещо уточнили його значення:

$ php -r :: Помилка розбору: помилка синтаксису, несподівана '::' (T_PAAMAYIM_NEKUDOTAYIM)

З офіційної документації PHP :

Оператор роздільної здатності (також називається Paamayim Nekudotayim) або, простіше кажучи, подвійна двокрапка - це маркер, який дозволяє отримати доступ до статичних, постійних та перекритих властивостей або методів класу.

Посилаючись на ці елементи за межами визначення класу, використовуйте назву класу.

Станом на PHP 5.3.0, можна посилатися на клас за допомогою змінної. Значення змінної не може бути ключовим словом (наприклад, власна, батьківська та статична).

Паамаїм Некудотайм спочатку здавався б дивним вибором для називання подвійної двокрапки. Однак, під час написання Zend Engine 0.5 (що забезпечує PHP 3), саме так вирішила назвати команда Zend. Це насправді означає подвійну двокрапку - на івриті!


1
Це насправді розмовна іврит. Зараз у Вікіпедії сказано: "В PHP оператором вирішення сфери дії також називають Паамаїм Некудотайм (іврит: פעמיים נקודותיים, вимовляється [paʔaˈmajim nəkudoˈtajim], друге слово розмовне розбещення נקודתיים, вимовляється [nəkudaˈtajim]], що означає" "На івриті".
мікрофонний

11

Це також відбувається, коли ви застосовуєте константу в PHP до функції порожній ():

if (!empty(SOME_CONSTANT)) {

}

Це був мій випадок. Я вирішив це за допомогою цього:

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

}

2
Чому константа буде порожньою?
Не панікуйте

1
Приємне запитання: Це лише наприклад, якщо ще хтось потрапив у цю ситуацію з помилками, я просто покажу, що це також буде можливо :)
Макс

6
@ Не панікуй: Чому ні? empty () перевіряється не тільки, якщо існує змінна, але й якщо її значення "порожнє" (у випадку PHP нуль (0) також порожній). Така константа може представляти значення, яке має бути змінене користувачем, як-от налаштування БД, або деякі істинні / хибні значення та інші типи значень, про які розробник коду не знає під час проектування. Це є загальним для API та кодових рамок. Я просто не розумію, чому розробники Zend-аналізатора не використовували загального слова, яке всі знають і розуміють, а натомість кілька івритів. Я маю на увазі, це навіть не дуже смішно чи так.
StanE

Я використовую константи в конфігураційних файлах, і я хочу знати в коді, чи певна константа порожня (null, false, 0, empty string, emty array ....). Чи слід перевіряти проти них усі вручну? WTF
qdev

5

Я знаю іврит досить добре, тому для уточнення для вас назви "Паамейм Некудотайм", перефразоване значення означає "подвійна двокрапка", але перекладається буквально:

  • "Paamayim" означає "два" або "двічі"
  • "Некудотайм" означає "крапки" (літ. "Отвори")
    • У єврейській мові некуда означає крапку.
    • Множина - це некудот , тобто крапки, які діють як голосні в англійській мові.
    • Причина, чому це називається Nekudo- tayim тому , що суфікс «-ayim» також означає «два» або «двічі», але це зазвичай означає , що два об'єкти , а не два дії, таким чином , ::означає «два рази, дві точки», або більш загальновідомий як Оператор розв'язання сфери застосування .

2

Це може статися на foreach під час використання:

foreach( $array as $key = $value )

замість

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

1

Для мене це сталося в межах функції класу.

У PHP 5.3 і вище $this::$defaultsдобре працювали; коли я поміняв код на сервер, який з будь-якої причини мав менший номер версії, він викинув цю помилку.

У моєму випадку рішенням було використовувати ключове слово selfзамість $this:

self::$defaults працює просто чудово.


Він запитував про це $this, або що з тобою сталося ?
Sapphire_Brick
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.