от Andrey(5-12-2002)

С известно зaбавяне отново ви представям новините покрай PHP.
  • Започвам с това, че в ZE2 бе добавена нова ключова дума abstract. Чрез нея могат да се декларират абстрактни методи. Те нямат тяло и при опит за тяхно извикване се генерира грешка.
  • В PECL в PEAR (аналог на CPAN) се намират различни експериментални и не чак толкова експериментални модули. Един от тези модули е модул-обвивка за ImageMagick пакета. Някои от вас може би знаят, че imagick има експортнато API за Perl. През изминалия период се появи втори модул и той ще замени досега същестуващия, като не се запазва обратна съвместимост с досега написания код използващ библиотеката. За повече информация относно модула : тук.
  • За занимаващите се с генериране на графични изображения с помощта на PHP може да е от интерес следният модул: http://mmcc.cx/php_imlib/. За съжаление, от известно време насам модулът не се разработва.
  • От месеци форумът за разработчиците на PHP не е "виждал" такава разгорещена дискусия като тази за локализацията на съобщенията на PHP. Дискусията започна от друг проблем: за някои разработчици показването на E_PARSE грешки е незадоволително и те пожелаха да има възможност да се прехвърля потребителя на друга страница или Apache да връща грешка 500 когато се генерира Е_PARSE. Това предложение бе отхвърлено с мотива, че то би създало объркване за повечето от разработчиците, още повече, че е възможна проверката на скриптове за Е_PARSE без дори да бъдат качени за изпълнение. Това може да се извърши по следния начин:
    php -l file_name.php
    Ако имате синтактична грешка в скрипта ще получите информация къде е.
    Но да се върна на дискусията за локализираните съобщения. Повечето основни PHP разработчици се обявиха срещу това. Бяха дадени идеи съобщенията да бъдат прехвърлени в XML или CDB файлове за по-лесна поддръжка. Основните аргументи против тази промяна са:
    1. Увеличена поддръжка при неувеличени човекоресурси.
    2. По-малка вероятност за помощ за програмисти, които търсят помощ и дават съобщения на език различен от английски. По тази причина ако разработчикът си няма представа какво е "Синтактична грешка", много по-малък кръг хора могат да му помогнат.
    Покрай локализацията на съобщенията бе изявено желанието и всяко съобщение да има свой собствен уникален идентификатор, който да дава възможност за по-бърза и качествена помощ - като например бърза справка в help-a или чрез Google. В крайна сметка бе решено съобщенията да останат на английски, а с известна доза вероятност да бъдат създадени уникални идентификатори на съобщенията.
  • В скоро време в PECL ще се появи модул-обвивка за libradius, a модул за работа със Samba можете да откриете тук. През периода Hartmut Holzgraefe каза, че има готов модул обвиващ libuuid. Тази библиотека върви с ext2fs tools.
  • Бяха направени няколко поправки в xmlrpc модула. Може би вече е възможна неговата компилация под Windows.
  • Докато в ZE1 e възможно да декларирате функции във функции (но трябва да декларирате само веднъж - прилага се защита, чрез define()) и да include()-вате код в локалното пространство на функцията, в ZE2 това няма да е възможно. Едно от възможните приложения на горепоказания метод е за симулиране на plugin-и. Все пак програмистите не трябва да се чувстват разочаровани, защото динамичното зареждане в ZE2 ще става чрез агрегация. За тези, които не знаят какво е агрегация, препоръчвам да прегледат книгата на Круглински за "Visual C++ 6.0".
  • Още през далечната 1997-ма е бил повдигнат въпроса с преобразуването на числа не в десетична бройна система, които се намират в низове:
    
    
    В първия случай "0хА", което е шестнадесетично 10, се преобразува до 0 вместо до 10. Във втория случай се преобразува до 10 и се добавя към 0 за да се получи 10. Възможно е в близко бъдеще да бъде намерено решение на този "проблем".
  • С ключовата дума public вече е възможно да се декларират и член-променливи на класове (ZE2) - еквивалент на var от ZE1, като се запазва обратната съместимост. За момента това е реализирано чрез псевдоним, поради което е възможно, но не и правилно, да декларирате метод по следният начин:
    var function a() {}
    
    Все пак това няма да бъде възможно в крайната версия на ZE2. Искам също да добавя, че от известно време насам има поддръжка на private и protected променливи. За методите нещата не са 100% ясни все още.
  • Излезна RC2 на 4.3.0. Надявам се в най-скоро време да излезе крайната версия. Писна ми да чакам :)) За тези, които искат да пробват RC2: http://qa.php.net.
  • В предишните колонки обявих нова версия на APD. Излезе и новата стабилна версия след 0.2 - това е версия 0.4p1. Вижте тук.
  • За завършек искам да представя една нова функция, която се появява във 4.3.0. Това е debug_backtrace(). Първоначално това беше възможност само на ZE1, но след разгорещени дискусии бе добавена и в ZE1 oт Thies Arntzen (един от разработиците на модулите за Oracle). Тази функция ви връща многомерен масив със стека на извикванията. Ако още не ви е ясно - ако сте ползвали Java сигурно сте виждали какво се получава при изключения - изписва се стека с извикванията. По този начин може да дебъгвате по-лесно различни приложения. Един пример: ако сте отделили кода за работа с база данни в клас то е много лесно в случай на неправилна заявка да се покаже къде точно е генерирана тя (къде е извикан метода за изпълнение на заявка) и точно какви параметри са подадени. Досега имаше 2 възможности - при работа с Mysql да правите следното:
    ($_err = mysql_error()) 
    	&& log_error_printf(
                 "Ooops  : [%s][%d][%s][%s]\n",
                 __FILE__, __LINE__ - 1 , $sql, $_err);
    
    или
    $this->db->query($sql, __FILE__, __LINE__);
    
    Първото определено загрозява кода и го увеличава. Второто е удобно, но все пак изисква повече писане и да се пише всеки път на заявка.
    Тъй като дори var_dump() на масива върнат от debug_backtrace() не е много четим, наскоро бе добавена функцията debug_print_backtrace(), с която вече е по-лесно да се прегледа информацията.
P.S. Автора благодари на г-н Пейо Попов за предложението за ново име на колонката.


<< SCMxx - Linux софтуер за Siemens телефони | Проблеми с ext3 и ядро 2.4.20 >>