Знайшов Іврит в PHP або проблема "t_paamayim_nekudotayim"

UPD: Рішення читайте в коментах!!

Задача була проста і тривіальна – є директорії в яких лежать файли. В основному це музика, відео, фото,.. і т. д… А в мене є цікавий задум як можна було б реалізувати розпізнавання та обробку кожного типу даних в директоріях, але таким чином щоб дуже легко можна було б додавати нові обробники за модульним принципом – є відповідний модуль – працює з ним, стерли – все працює але вже без модуля.

При реалізації я виніс кожен модуль в кремий клас, і в мене виходить сукупність класів – типу Pictures, Video, Text що походять від єдиного класу Data який має метод check() що перекривається для кожного класу персонально. Далі задумка полягає в тому щоб для конкретного випадку не ініціалізовувати екземпляр об’єкту, – а викликати статичний метод check() який має кожен з цих класів і визначати чи підходить даний набір файлів в директорії для цього класу. Якщо підходить – то створюємо екземпляр поточного класу і обробляємо дані а якщо ні – то викликаємо статично метод check() наступного класу.

        Приблизно це виглядатиме ось так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$full_path = DATA_DIR./.$curr_dir;
require_once SYS_DIR./classes/components_plugins/class.pictures.php’;
require_once SYS_DIR./classes/components_plugins/class.video.php’;
require_once SYS_DIR./classes/components_plugins/class.text.php’; 
 
/**
 * temporary array
 * TODO: read installed modules from DB
 */
$modules = array(‘pictures’, ‘video’, ‘text’);
 
foreach ($modules as $module)
{
    $res = $module::check($full_path); // ERROR LINE!!!
    if ($res === true)
    {
        $proc = new $module($db);
        $proc->process($full_path);
    }
 
}

Все здавалося б правильно – але PHP 4 парсер видає дивну синтаксичну помилку “syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM” в рядку:

$res = $module::check($full_path); – виклик статичного методу коли назва класу задається динамічно…

Спочатку я подумав що це китайською або японською щось написано,…

T_PAAMAYIM_NEKUDOTAYIM звучали досить незнайомо для мене. Але погууугливши я зрозумів що все набагато банальніше:

it IS Hebrew, written in English letters “t_paamayim_nekudotayim
T – i guess “term”?
PAAMAYIM – twice
NEKUDOTAYIM – colon

It means “Unexpected double-colon”.

Remember that the current PHP is based on the ZEND engine. I don’t remember off the top of my head the names of the 2 developers (Zeev and Andy I think), but I remember that they are Jewish/Hebrew names.

Хто не петрає в англ тому ніколи не дізнатися в чому тут справа.

Тепер навіть незнаю чи то цю статтю в гумор відносити чи в debug… ))

Поки шукатиму рішення проблеми…

Ще спробую на PHP5 як така модель працюватиме і чи є там таке ж повідомлення про помилку.

This entry was posted in Debug-курйози and tagged , , . Bookmark the permalink.

5 Responses to Знайшов Іврит в PHP або проблема "t_paamayim_nekudotayim"

  1. Joseph says:

    тут детільніше

    http://www.php.net/manual/en/keyword.paamayim-nekudotayim.php

    Щодо вирішення проблеми – то я знайшов в user contributed notes вирішення через call_user_func() але якось криво то вирішується… єдине що радує – то це те що в PHP5 здається такої проблеми вже нема.

  2. Загалом все одно треба обмiзкувати :)

  3. admin says:

    Моє рішення для PHP4 виглядає так:

    1
    2
    3
    4
    5
    
    /**
     * Call static method 
     * to check what plugin to use  
     */
    $res = call_user_func(  array(&$module, 'check') , $full_path );
  4. caustic says:


    єдине що радує – то це те що в PHP5 здається такої проблеми вже нема.

    2Josehp: еще как есть.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">