Што има ново во PHP 5.4?

На 1 март конечно дојде времето: Повеќе од две и пол години по објавувањето на верзијата 5.3.0, менаџерите за изданија на новата верзија, Стас Малишев и Дејвид Сорија Пара, објавија достапност на верзијата PHP 5.4.0. Со помош на осум кандидати за ослободување, оваа верзија е фино нагодена од средината на октомври минатата година. Верзијата 5.4.0 содржи многу големи нови карактеристики и помали подобрувања, побрза е и пониска, но исто така носи список на нови функции со кои може да бидат потребни измени на вашиот сопствен код. Дури и ако списокот на иновации не е особено долг, неколку работи се променија. По објавувањето на верзијата 5.3, на PHP 6 всушност се работеше, како што откриваат разни претходно објавени, но никогаш објавени наслови на книги. Но, по повеќемесечна работа на фундаменталното преминување во UTF-16, оваа рута беше одбиена од различни причини. Многу други одлики останаа и се задржани за 5,4 и дополнителни 5x.

ново

Пролетно чистење

PHP 5.4 повеќе не ја поддржува или бара автоконф верзија 2.13 објавена во 1999 година, што е обезбедена само од дистрибуциите поради неколку пакети. Верзиите од 2.59 сега се поддржани, додека се препорачуваат 2.60 или понови. Последново треба да биде достапно во секоја модерна дистрибуција на Linux, но ефектите не се критични и треба да влијаат само на излезот за помош на повикот ./configure. Се разбира, ова влијае само на процесот на градење на PHP и е од мала важност за корисникот.

Сепак, треба да се забележат изоставените карактеристики и опции, од кои најраспространети беа веројатно директивите на INI safe_mode (и сите поврзани со него), magic_quotes_gpc, allow_call_time_pass_reference и register_globals/register_long_arrays, кои, сепак, беа обележани како амортизирани во 5.3.0 . safe_mode долго време беше критикуван за зголемување на безбедноста само незначително, но истовремено пренесувајќи погрешна слика за безбедност и, пред сè, предизвикувајќи многу проблеми со конфигурацијата. magic_quotes_gpc, register_globals и register_long_arrays, од друга страна, се постојано исклучени во повеќето колекции веќе подолго време во смисла на најдобри практики и нивната употреба е омаловажувана.

Списокот со отстранети функции е ограничен на следново: Различни функции mysqli _ * исто така се отстранети, но не сите. Понатаму, MySQL екстензиите mysql, mysqli и PDO_mysql сега стандардно ја користат тековната библиотека mysqlnd. Застарениот libmysql сè уште може да се користи, но мора да се состави и во него.

Вреди да се спомене и ракувањето со временските зони. Без да ја специфицирате функцијата date.timezone во php.ini или да ја користите функцијата date_default_timezone_set (), временската зона веќе не се претпоставува, но како стандардна вредност се користи UTC. Понатаму, нема поддршка за путенв („ТЗ = ...“).

Постарата екстензија/sqlite на екстензијата sqlite2 беше отстранета од зададената инсталација, но многу почесто користените екстензии ext/sqlite3 и ext/pdo_sqlite остануваат непогодени. Тие сè уште можат да се најдат во папката/pecl/во изворниот код (да не се мешаат со складиштето PECL во кое првично се наоѓале).

За да бидат укинати во блиска иднина, функциите mcrypt_generic_end () и mysql_list_dbs () се означени како застарени. Исто така, 5.4 ќе биде последната верзија на PHP што има пакети со Windows за Windows XP и Windows 2003.

Фрагментот на кодот во списокот 1 ќе излезе точно спротивно од PHP 5.3, т.е. точно/неточно за издавачот ()/празно (). Не само жиците се засегнати како неутрализирани, туку и двојните, буловите и нула вредностите предизвикуваат пораки E_NOTICE. Од друга страна, стринг-неутрализирањата што можат да се пренесат на цели вредности со автоматско емитување на PHP (на пр. '12 .3 'или' 5 foo ') генерираат E_NOTICE, но сепак се претвораат во 12 или 5 и со тоа "работат". Употребата на суперглобали како имиња на параметри, како на пример во следниот пример, сега доведува до фатална грешка при конвертирање на низите во низа (што доведе до низа со низа содржина), евентуално незабележана до сега:

Ако конверзијата сега генерира и E_NOTICE, однесувањето се задржува заради компатибилност наназад.

Користењето array_combine (array (), array ()) сега резултира во празна низа наместо FALSE, како што би се очекувало, и поставување на својство на променлива која е NULL, неточна или празна низа резултира во E_WARNING, наместо E_STRICT.

Нивото на грешка E_ALL сега стандардно вклучува E_STRICT; Една од најжестоко дебатираните промени, иако и тука на програмерите им се советуваше со години да развиваат со максимално ниво на грешка за да не ги превидуваат предупредувањата, колку и да изгледаат безопасни. Овде станува проблематично ако, спротивно на спротивните препораки, опцијата display_errors = Вклучена е вклучена во операција во живо и се прикажат предупредувањата E_STRICT што сега ги содржи E_ALL.

Поизразената тенденција во дискусиите за списокот со програмери е да не се прави основно однесување на моторот PHP конфигуриран за корисникот. Ова не се користи за ограничување на функционалноста, туку само за да се избегнат изненадувања, како што е фактот дека апликациите реагираат сосема поинаку, во зависност од тоа како изгледа користената php.ini. Горенаведените директиви magic_quotes_gpc и register_globals беа најважниот чекор тука, но y2k_compliance, session.bug_compat_42 и session.bug_compat_warn исто така беа укинати во процесот.

[заглавие = Страна 2: Најважните карактеристики]

Најважните карактеристики

Карактеристиката за која најдолго се дискутира е она што е познато како црти. Тие беа предложени од Стефан Мар во 2008 година под насловот „Хоризонтална повторна употреба“ и дури мораа да преживеат две РФЦ и разни долги дискусии за поштенската листа Интернали. Стив Кук е заслужен за фразата „Повеќекратно наследство е добро, но не постои добар начин да се направи тоа.“ И, карактеристиките се должат на идејата за спроведување на повеќекратно наследување на таков начин што предностите ги надминуваат недостатоците [1]. Детали за спроведувањето на одликите може да се најдат во [2]. Голем број класи може да послужат како пример овде, сите треба да можат да запишуваат одредени дејства, но не делат хиерархија на наследство и затоа или дуплираат или ја капсулираат истата функционалност (список 2).

PHP 5.4 конечно доби внатрешен веб-сервер кој може да заврши добра работа во развојот. Сепак, не треба да се користи продуктивно само заради перформанси, бидејќи веб-серверот се справува со сите барања едно по друго (вклучувајќи интегрирани листови со стил, графички датотеки и JavaScript). Исто така, може да се претпостави дека оваа нова опција не беше тестирана толку многу во циклусот на ослободување, како промените што се користат во работењето на сопствената апликација на новата верзија. Документацијата, исто така, експлицитно не препорачува продуктивна употреба.

Внатрешниот веб-сервер се повикува на командната линија со командата php -S име на домаќин: порта. Еве, името на домаќинот: пристаништето обично треба да биде нешто како localhost: 81. Така што до веб-серверот може да се стигне и однадвор, може да се користи и 0.0.0.0:81. Тековниот директориум потоа се користи како DocumentRoot, но ова може да биде експлицитно поставено со аргументот -t при стартување. Исто така е можно да се наведе скрипта PHP како последен аргумент што претставува минимален преден контролер. Списокот 3 покажува пример од документацијата.

Датотеките што се слики според нивната наставка на датотека се доставуваат директно тука, инаку содржината едноставно се враќа. Ова може да се направи преку директен излез или да вклучува/бара. Покомплицираните поставувања, како на пример во апликациите со многу mod_rewrite, треба да бидат преносливи со одреден напор. За жал, сè уште нема општо познато, брзо решение. Но, бидејќи повеќето тековни рамки ги имаат сите задачи направени од index.php во DocumentRoot во секој случај, напорот треба да биде ограничен.

Веб-серверот се смета за посебен SAPI (Server API) со името кли-сервер, но исто така е CLI бинарен во однос на однесувањето и затоа не го користи истиот php.ini како бинарниот CGI/FastCGI што обично се користи во веб-серверот. Опцијата -c при стартување ви овозможува да ја користите посакуваната php.ini и тука. Обоен излез во командната линија може исто така да се активира тука преку cli_server.color. PHP исто така поддржува синтакса на кратка низа слична на JavaScript или други јазици. Воведувањето на: наместо => беше изоставено, ознаката [] едноставно може да се сфати како кратка форма на низа () (Листа 4).

Повеќе карактеристики

Имаше и многу помали одлики кои, во голема мера, може да го поедностават животот на еден програмер PHP. Сега постои вид што може да се повика, што дозволува параметри кои ги исполнуваат истите критериуми со кои проверува функцијата is_callable (). Овие се претежно затворачи и низи кои содржат имиња на функции, но исто така е поддржана и нотацијата на низата во формата низа ('класа', 'метод') или низа ($ објект, 'метод'). Целата работа служи за поедноставување на управувањето со затворачите без дополнителни повици кон is_clalable () (список 5). Како што се очекуваше, „Здраво, свет!“ Излегува. Се разбира, ова „дереференцирање на низата“ работи и ако се врати асоцијативна или мешана низа.

Бинарните броеви сега можат да се запишат во форма 0b101010, слично на тоа како хексадецималните броеви може да се запишат во формата 0x2a. Кратката форма