Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118

Notice: A non well formed numeric value encountered in /var/www/clients/client2/web3/web/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119

Funkce preg_replace_callback()

K čemu se tato funkce může asi tak používat? Funkci preg_replace zná asi každý. Vezmu řetězec, najdu v něm to, co se má podle nějakého vzoru najít, a to, co jsem našel, vrátím. Jednoduché.

Tato funkce dělá něco podobného s tím rozdílem, že je schopná rovnou nalezené řetězce zpracovávat/formátovat, nahrazovat upravovat vlastnosti chodu programu.

Ano, někdo může namítnout, že toto dělá i funkce preg_replace. A já musím potvrdit, že ano. Je to asi jako cyklus WHILE a FOR. Oba se dají zaměnit, libovolně prohazovat. Přesto se používají oba.

Zpět ale k funkci preg_replace_callback. Její praktické využití je třeba, když píšete nějakou šablonu a potřebujete na základě nějakých řídicích znaků, které mají určité parametry, vkládat nějaká předzpracovaná data. Nebo na základě toho, co najdete, inicializovat nějakou třídu, v ní provést nějaké informace a na základě toho vrátit nějaký výsledek.

Nejjednodušší bude napsat přímo příklad. Tady mám k dispozici kus šablony, která obsahuje řídicí příkaz $link a obsahuje parametr src.

 

Pomocí tohoto řídicího znaku by se měl řetězec nahradit odkazem někam do internetu. Napřed si ukážeme, jak by takové řešení mohlo vypadat s využitím metody preg_replace

Ano, toto řešení je hezké, jednoduché a krátké. Jak ale zajistit třeba nějaké formátování, např. u obrázku, kdy budumít obrázek zadaný do šablony jen adresou. Naprosto jednoduchým mechanizmem nahradím řídicí znaky tagem img a příslušnou adresou. To není těžké.

Co když ale budu chtít do titlu (nebo altu) přidat informaci o jeho velikosti, rozměrech, nebo kdy byl nahrán. Nebo má-li ten obrázek být klikací, aby se mohl zobrazit například v nějakém lightboxu?

To už tak jednoduše nepůjde udělat pomocí funkce preg_replace, a proto si zavoláme na pomoc funkci preg_replace_callback. Původní kus šablony si trochu upravíme a přidáme si tam parametr pro zobrazování obrázku do lightboxu.

 

PHP skript, který se bude starat o vykreslování by mohl vypadat nějak takhle: