от 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 файлове за по-лесна поддръжка. Основните аргументи против тази промяна са:
- Увеличена поддръжка при неувеличени човекоресурси.
- По-малка вероятност за помощ за програмисти, които търсят помощ и дават съобщения на език различен от английски. По тази причина ако разработчикът си няма представа какво е "Синтактична грешка", много по-малък кръг хора могат да му помогнат.
Покрай локализацията на съобщенията бе изявено желанието и всяко съобщение да има свой собствен уникален идентификатор, който да дава възможност за по-бърза и качествена помощ - като например бърза справка в 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-ма е бил повдигнат въпроса с преобразуването на числа не в десетична бройна система, които се намират в низове:
php
print (int) "0xA" + 0; // prints 0
print (int) ("0xA" + 0); // prints 10
?>
В първия случай "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 >>
|