<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Mintdesign &#187; const</title>
	<atom:link href="http://blog.mintdesign.pl/tag/const/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.mintdesign.pl</link>
	<description>Blog poświęcony tematyce tworzenia stron internetowych.</description>
	<lastBuildDate>Mon, 09 May 2011 18:46:48 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Dlaczego warto używać stałych?</title>
		<link>http://blog.mintdesign.pl/php/dlaczego-warto-uzywac-stalych.html</link>
		<comments>http://blog.mintdesign.pl/php/dlaczego-warto-uzywac-stalych.html#comments</comments>
		<pubDate>Tue, 05 Jan 2010 21:20:39 +0000</pubDate>
		<dc:creator>Virus</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[define]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[stałe]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.mintdesign.pl/?p=387</guid>
		<description><![CDATA[W PHP (i w każdym chyba języku programowania) oprócz zmiennych istnieją również stałe. Jak łatwo się domyślić z nazwy, przyjmują one jedną wartość podczas definicji i nie można jej później zmienić operatorem przypisania. Zastosowanie stałych nie dla wszystkich jest oczywiste, początkujący programiści często nie doceniają wygody i przydatności ich stosowania. W tym artykule przedstawiam kilka [...]]]></description>
			<content:encoded><![CDATA[<p>W PHP (i w każdym chyba języku programowania) oprócz zmiennych istnieją również stałe. Jak łatwo się domyślić z nazwy, przyjmują one jedną wartość podczas definicji i nie można jej później zmienić operatorem przypisania. Zastosowanie stałych nie dla wszystkich jest oczywiste, początkujący programiści często nie doceniają wygody i przydatności ich stosowania. W tym artykule przedstawiam kilka z życia wziętych przykładów zastosowania stałych.<br />
<span id="more-387"></span><br />
Na początek jednak trochę teorii. Oto sposoby definiowania stałych w PHP:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'STALA'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// definicja stałej STALA o wartości 10</span><br />
<span style="color: #000000; font-weight: bold;">const</span> INNA_STALA <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// od PHP 5.3.0: definicja stałej INNA_STALA o wartości 20</span></div></td></tr></tbody></table></div>
<p>Osobiście preferuję pierwszy sposób z powodu jego wszechstronności: w funkcji <strong>define()</strong> za nazwę stałej możemy podać zmienną o danej wartości.<br />
Pomimo iż w nazwach stałych dopuszczalne jest nazewnictwo takie same, jak u zmiennych (małe i wielkie litery, cyfry i znak podkreślenia), przyjęło się, iż stałe powinny mieć nazwy pisane wielkimi literami.<br />
Do stałych w kodzie odwołujemy się w następujący sposób:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">echo</span> STALA<span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/constant"><span style="color: #990000;">constant</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'STALA'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/constant"><span style="color: #990000;">constant</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$zmienna_z_nazwa_stalej</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>W przypadku definiowania stałych funkcją <strong>define()</strong> i zmienną w pierwszym parametrze, zmienna ta może zawierać dowolnego stringa. Gdy string ten zawiera znaki niedozwolone w przypadku normalnego nazywania stałych, możemy do tej stałej odwołać się jedynie poprzez funkcję <strong>constant()</strong>. W pozostałych przypadkach najlepiej jest po prostu wstawić nazwę stałej w danym miejscu kodu. Przy definiowaniu stałych wielkość liter jest rozróżniana. W przypadku odwołania się do nieistniejącej stałej generowany jest również notice, a nazwa nieistniejącej stałej, którą podaliśmy, zostaje przyjęta za jej wartość. Przykład:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'JAKAS_STALA'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">123</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> Jakas_stala<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// generowany jest notice o treści</span><br />
<span style="color: #666666; font-style: italic;">// &quot;Use of undefined constant Jakas_stala - assumed 'Jakas_stala'&quot;</span><br />
<span style="color: #666666; font-style: italic;">// i wyświetlony zostanie napis &quot;Jakas_stala&quot;</span></div></td></tr></tbody></table></div>
<p>Aby sprawdzić, czy stała o danej wartości istnieje, używamy funkcji <strong>defined()</strong>. Przykład użycia:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'STALA'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'STALA'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// zwraca true;</span><br />
<a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'NIE_STALA'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// zwraca false;</span></div></td></tr></tbody></table></div>
<p>To na tyle teorii, przejdźmy do praktycznych zastosowań.</p>
<h2>Często stosowane wartości</h2>
<p>Weźmy za przykład skrypt, który dzieli dużą ilość newsów na strony. Musimy znać liczbę elementów, które mają się jednorazowo pojawiać na stronie, numer aktualnej strony oraz wyliczyć ilość wszystkich stron, aby móc znać odniesienie do ostatniej strony. Zakładając, że ilość elementów na stronę to 10, przykładowy fragment kodu wyglądałby tak:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$aktualna_strona</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'strona'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'strona'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$numer_ostatniej_strony</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/ceil"><span style="color: #990000;">ceil</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ilosc_danych</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// pobranie danych z bazy</span><br />
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT cos FROM gdzies WHERE cos = '</span>jakos<span style="color: #0000ff;">' LIMIT '</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$aktualna_strona</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">', 10'</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Liczba 10 pojawia się w powyższym kodzie trzy razy. Co w wypadku, gdy okaże się, że nie chcemy by elementów było 10, tylko 5? Musimy trzy razy zastąpić ręcznie dziesiątkę piątką. Sytuacja dodatkowo komplikuje się, gdy taki skrypt używany jest kilka razy.<br />
Dodatkowo, liczba 10 jest tutaj zwykłą liczbą, nieprzypisaną do żadnej zmiennej. Co to za liczba? Co oznacza i do czego służy? Patrząc na ten kod nie jest to takie oczywiste, a im później do niego wrócimy, tym mniejsza szansa, że będziemy wiedzieli o co w nim chodzi.<br />
Rozwiązanie z użyciem stałych jest dużo wygodniejsze jeśli chodzi o użyteczność i przejrzystość kodu. Na początku pliku definiujemy stałą o nazwie <strong>ITEMS_PER_PAGE</strong> i wartości 10:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ITEMS_PER_PAGE'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Później w poprzednim skrypcie zamieniamy każdą dziesiątkę na naszą stałą:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$aktualna_strona</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'strona'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'strona'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$numer_ostatniej_strony</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/ceil"><span style="color: #990000;">ceil</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ilosc_danych</span> <span style="color: #339933;">/</span> ITEMS_PER_PAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// pobranie danych z bazy</span><br />
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT cos FROM gdzies WHERE cos = '</span>jakos<span style="color: #0000ff;">' LIMIT '</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$aktualna_strona</span> <span style="color: #339933;">*</span> ITEMS_PER_PAGE<span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">', '</span> <span style="color: #339933;">.</span> ITEMS_PER_PAGE<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>W tym wypadku, gdy chcemy zmienić liczbę elementów na stronie, wystarczy tylko zmienić wartość w funkcji <strong>define()</strong>.</p>
<h2>Parametry funkcji</h2>
<p>W PHP istnieje wiele predefiniowanych stałych, które znajdują zastosowanie w wielu miejscach. I tak na przykład funkcja <strong>preg_match_all()</strong> za czwarty parametr może przyjąć trzy stałe: <strong>PREG_PATTERN_ORDER</strong>, <strong>PREG_SET_ORDER</strong> i <strong>PREG_OFFSET_CAPTURE</strong>. Ich wartości to odpowiednio 1, 2 i 256. Teoretycznie liczby są krótsze i szybciej się je zapisze, jednak o ile czytelniej i łatwiej w zapamiętaniu używać stałych? Jeszcze bardziej użyteczny przykład ma się z typami plików w GD. Co jest czytelniejsze i łatwiejsze do zapamiętania:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/getimagesize"><span style="color: #990000;">getimagesize</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <a href="http://www.php.net/list"><span style="color: #990000;">list</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">,</span> <span style="color: #000088;">$type</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;to jest JPG&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>czy</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/getimagesize"><span style="color: #990000;">getimagesize</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <a href="http://www.php.net/list"><span style="color: #990000;">list</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">,</span> <span style="color: #000088;">$type</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span> <span style="color: #339933;">==</span> IMAGETYPE_JPEG<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;to jest JPG&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>?<br />
Definiowanie stałych ułatwia życie przy pisaniu funkcji, w których parametry mogą mieć jedną z kilku dopuszczalnych wartości. Warto zaznaczyć, że w takich przypadkach jak podano najlepiej sprawdzają się stałe będące liczbami naturalnymi &#8211; porównywanie ich jest dużo szybsze niż porównywanie łańcuchów znaków.<br />
Co ciekawe, stałe jeszcze bardziej ułatwiają życie, gdy potrzebujemy funkcji, w których jeden parametr może przyjąć kilka niezależnych wartości. Tutaj pojawiają się flagi.</p>
<h2>Flagi</h2>
<p>Flagi są stałymi przyjmującymi za wartości kolejne potęgi dwójki (1, 2, 4, 8, 16&#8230;). Używając ich, bardzo łatwo można ustalić, czego akurat wymagamy od funkcji.<br />
Napiszmy przykładową funkcję walidującą dane w formularzu. Załóżmy, że dopuszczamy podanie przez użytkownika danych składających się tylko z małych liter, tylko z wielkich liter, tylko z cyfr oraz dowolnych kombinacji wymienionych. Na początku definiujemy stałe, które będą używane jako flagi.</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'LOWERCASE'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'UPPERCASE'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DIGITS'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>W jaki sposób możemy ustawić więcej niż jedną flagę? Służy do tego operator binarny OR: <strong>|</strong> (pojedyncza pionowa kreska &#8211; nie mylić z operatorem logicznym, podwójną pionową kreską). Sprawdzenie, czy dana flaga jest ustawiona odbywa się z użyciem operatora binarnego AND: <strong>&#038;</strong> &#8211; pojedynczy ampersand. Zdefiniujmy naszą funkcję:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> waliduj<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dane</span><span style="color: #339933;">,</span> <span style="color: #000088;">$flagi</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$flagi</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// żadna flaga nie jest ustawiona - wszystkie dane są poprawne - zwracamy wynik</span><br />
&nbsp;<span style="color: #000088;">$wyrazenie</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/[^'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// łańcuch, który posłuży nam do budowy wyrażenia regularnego</span><br />
&nbsp;<span style="color: #666666; font-style: italic;">// dokładamy znaki do zbioru, z którego znaki nie powinny wystąpić w sprawdzanym łańcuchu</span><br />
&nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$flagi</span> <span style="color: #339933;">&amp;</span> LOWERCASE<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$wyrazenie</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'a-z'</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$flagi</span> <span style="color: #339933;">&amp;</span> UPPERCASE<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$wyrazenie</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'A-Z'</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$flagi</span> <span style="color: #339933;">&amp;</span> DIGITS<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$wyrazenie</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'0-9'</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #000088;">$wyrazenie</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">']/'</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #666666; font-style: italic;">// jeśli w wyrażeniu znajdują się znaki spoza zbioru, zwracamy fałsz</span><br />
&nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/preg_match"><span style="color: #990000;">preg_match</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wyrazenie</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dane</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Dla tych pierwszy raz widzących wyrażenia regularne: zaczynać i kończyć się muszą one dowolnym niealfanumerycznym znakiem (najczęściej używa się slasha). Nawiasy kwadratowe służą do wyodrębnienia zbioru znaków, który ma się pojawić w łańcuchu. Jeśli zaraz po lewym nawiasie występuje znak <strong>^</strong>, wówczas wyrażenie dotyczy wszystkich znaków spoza tego zbioru.<br />
Przykładowe wywołania funkcji z ustawionymi flagami:</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">waliduj<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Tekst'</span><span style="color: #339933;">,</span> LOWERCASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// zwróci 0</span><br />
waliduj<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Tekst'</span><span style="color: #339933;">,</span> LOWERCASE <span style="color: #339933;">|</span> UPPERCASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// zwróci 1</span><br />
waliduj<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'T3kst'</span><span style="color: #339933;">,</span> LOWERCASE <span style="color: #339933;">|</span> UPPERCASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// zwróci 0</span><br />
waliduj<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'T3kst'</span><span style="color: #339933;">,</span> LOWERCASE <span style="color: #339933;">|</span> UPPERCASE <span style="color: #339933;">|</span> DIGITS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// zwróci 1</span></div></td></tr></tbody></table></div>
<p>Notka: w pierwszym przypadku sprawdzane wyrażenie regularne to <strong>/[^a-z]/</strong>, w drugim i trzecim: <strong>/[^a-zA-Z]/</strong>, a w czwartym <strong>/[^a-zA-Z0-9]/</strong>. Więcej o wyrażeniach regularnych w kolejnym tutorialu.</p>
<p>To by było na tyle. Mam nadzieję, że art się przyda, itd, itp <img src='http://blog.mintdesign.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Jest to moje pierwsze dzieło tego typu, więc nie szczędzić krytyki ani pomysłów na kolejne tutoriale w komentarzach.</p>
<ul class="related_post"><li><a href="http://blog.mintdesign.pl/php/wyrazenia-regularne-cz-1.html" title="Wyrażenia regularne cz. 1">Wyrażenia regularne cz. 1</a> (1)</li><li><a href="http://blog.mintdesign.pl/inne/jak-sciagac-wieksze-zdjecia-z-serwisu-istockphoto-com.html" title="<!--:pl-->Jak ściągać większe zdjęcia z serwisu istockphoto.com<!--:--><!--:en-->How to download photos from istockphoto.com in high resolution<!--:-->"><!--:pl-->Jak ściągać większe zdjęcia z serwisu istockphoto.com<!--:--><!--:en-->How to download photos from istockphoto.com in high resolution<!--:--></a> (4)</li><li><a href="http://blog.mintdesign.pl/photoshop/videotutorial-realistyczny-napis-3d.html" title="[Videotutorial] Realistyczny napis 3D">[Videotutorial] Realistyczny napis 3D</a> (5)</li><li><a href="http://blog.mintdesign.pl/php/jak-wyswietlic-info-o-autorze-wpisu.html" title="Jak wyświetlić info o autorze wpisu?">Jak wyświetlić info o autorze wpisu?</a> (2)</li><li><a href="http://blog.mintdesign.pl/photoshop/tutorial-button-w-stylu-mac-os.html" title="[Tutorial] Button w stylu &#8216;Mac OS&#8217;">[Tutorial] Button w stylu &#8216;Mac OS&#8217;</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.mintdesign.pl/php/dlaczego-warto-uzywac-stalych.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

