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 як така модель працюватиме і чи є там таке ж повідомлення про помилку.

тут детільніше
http://www.php.net/manual/en/keyword.paamayim-nekudotayim.php
Щодо вирішення проблеми – то я знайшов в user contributed notes вирішення через call_user_func() але якось криво то вирішується… єдине що радує – то це те що в PHP5 здається такої проблеми вже нема.
Загалом все одно треба обмiзкувати
Моє рішення для PHP4 виглядає так:
…
єдине що радує – то це те що в PHP5 здається такої проблеми вже нема.
…
2Josehp: еще как есть.
ви праві, проблема є у старих версіях < PHP 5.3 яких нажаль покищо дуже багато на хостингах
А вже починаючи з версії PHP 5.3 можна вільно писати