<?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>PHP в SouthPark &#187; Программирование</title>
	<atom:link href="http://php.southpark.com.ua/category/programmirovanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://php.southpark.com.ua</link>
	<description>Хитрости и секреты CakePHP</description>
	<lastBuildDate>Mon, 07 Jun 2010 09:41:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Вложенность в регулярных выражениях</title>
		<link>http://php.southpark.com.ua/2008/recurrent-parentheses-regex/</link>
		<comments>http://php.southpark.com.ua/2008/recurrent-parentheses-regex/#comments</comments>
		<pubDate>Wed, 07 May 2008 18:08:03 +0000</pubDate>
		<dc:creator>Владимир Лучанинов</dc:creator>
				<category><![CDATA[Куски кода]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://php.southpark.com.ua/?p=76</guid>
		<description><![CDATA[Мастера регулярных выражений могут делать настоящую магию. Вместо того, чтобы писать сложные лексические анализаторы, они могут одной строчкой сделать всю работу. Это как игра го - изучить основы очень просто, но чтобы стать настоящим профессионалом нужны годы опыта.
Допустим, есть строка
plain text
CODE:




begin someFunction&#40;"test"&#41;; end; 






Нужно выделить из неё
plain text
CODE:




&#40;"test"&#41; 






Элементарно
plain text
PHP:




$s = 'begin someFunction(&#34;test&#34;); end;';


preg_match&#40;'#\(.*?\)#', $s, [...]]]></description>
			<content:encoded><![CDATA[<p>Мастера регулярных выражений могут делать настоящую магию. Вместо того, чтобы писать сложные лексические анализаторы, они могут одной строчкой сделать всю работу. Это как игра го - изучить основы очень просто, но чтобы стать настоящим профессионалом нужны годы опыта.</p>
<p>Допустим, есть строка</p>
<div class="igBar"><span id="lcode-12"><a href="#" onclick="javascript:showPlainTxt('code-12'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-12">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">begin someFunction<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"test"</span><span style="color:#006600; font-weight:bold;">&#41;</span>; end; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Нужно выделить из неё</p>
<div class="igBar"><span id="lcode-13"><a href="#" onclick="javascript:showPlainTxt('code-13'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-13">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"test"</span><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Элементарно</p>
<div class="igBar"><span id="lphp-14"><a href="#" onclick="javascript:showPlainTxt('php-14'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-14">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$s</span> = <span style="color:#FF0000;">'begin someFunction(&quot;test&quot;); end;'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/preg_match"><span style="color:#000066;">preg_match</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'#<span style="color:#000099; font-weight:bold;">\(</span>.*?<span style="color:#000099; font-weight:bold;">\)</span>#'</span>, <span style="color:#0000FF;">$s</span>, <span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#000066;">print_r</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>выведет</p>
<div class="igBar"><span id="lphp-15"><a href="#" onclick="javascript:showPlainTxt('php-15'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-15">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/array"><span style="color:#000066;">Array</span></a></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> =&gt; <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"test"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Но в боевых условиях пользователи обязательно рано или поздно добавят параметр со скобками</p>
<div class="igBar"><span id="lcode-16"><a href="#" onclick="javascript:showPlainTxt('code-16'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-16">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">begin someFunction<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"test"</span>,<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;color:#800000;">5</span>+<span style="color:#800000;color:#800000;">3</span><span style="color:#006600; font-weight:bold;">&#41;</span>*<span style="color:#800000;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span>; end; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
<span id="more-76"></span></p>
<p>Наш код</p>
<div class="igBar"><span id="lphp-17"><a href="#" onclick="javascript:showPlainTxt('php-17'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-17">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$s</span> = <span style="color:#FF0000;">'begin someFunction(&quot;test&quot;,(5+3)*2); end;'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/preg_match"><span style="color:#000066;">preg_match</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'#<span style="color:#000099; font-weight:bold;">\(</span>.*?<span style="color:#000099; font-weight:bold;">\)</span>#'</span>, <span style="color:#0000FF;">$s</span>, <span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#000066;">print_r</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
выведет</p>
<div class="igBar"><span id="lcode-18"><a href="#" onclick="javascript:showPlainTxt('code-18'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-18">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Array</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> =&gt; <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"test"</span>,<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;color:#800000;">5</span>+<span style="color:#800000;color:#800000;">3</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>А вот вам</p>
<div class="igBar"><span id="lphp-19"><a href="#" onclick="javascript:showPlainTxt('php-19'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-19">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$s</span> = <span style="color:#FF0000;">'begin someFunction(&quot;test&quot;,(5+3)*2); end;'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/preg_match"><span style="color:#000066;">preg_match</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'#<span style="color:#000099; font-weight:bold;">\(</span>(([^<span style="color:#000099; font-weight:bold;">\(</span><span style="color:#000099; font-weight:bold;">\)</span>]+)|(?R))*<span style="color:#000099; font-weight:bold;">\)</span>#'</span>, <span style="color:#0000FF;">$s</span>, <span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#000066;">print_r</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Это выведет</p>
<div class="igBar"><span id="lphp-20"><a href="#" onclick="javascript:showPlainTxt('php-20'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-20">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/array"><span style="color:#000066;">Array</span></a></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> =&gt; <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"test"</span>,<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">5</span>+<span style="color:#CC66CC;color:#800000;">3</span><span style="color:#006600; font-weight:bold;">&#41;</span>*<span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC66CC;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> =&gt; *<span style="color:#CC66CC;color:#800000;">2</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#93;</span> =&gt; *<span style="color:#CC66CC;color:#800000;">2</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>А теперь немного оптимизируем</p>
<div class="igBar"><span id="lphp-21"><a href="#" onclick="javascript:showPlainTxt('php-21'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-21">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/preg_match"><span style="color:#000066;">preg_match</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'#<span style="color:#000099; font-weight:bold;">\(</span> (?: (?&gt;[^<span style="color:#000099; font-weight:bold;">\(</span><span style="color:#000099; font-weight:bold;">\)</span>]+) | (?R) )* <span style="color:#000099; font-weight:bold;">\)</span>#x'</span>, <span style="color:#0000FF;">$s</span>, <span style="color:#0000FF;">$m</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Модификатор "x" даёт ставить лишние пробелы для улучшения читабельности.<br />
?> - ускоряет производительность, не проверяя одни и те же символы, если они уже где-то подошли<br />
?: - делает так, чтобы не выводилось это подвыражение (заметьте пропажу [1], [2])</p>
<div class="igBar"><span id="lphp-22"><a href="#" onclick="javascript:showPlainTxt('php-22'); return false;">plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-22">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/array"><span style="color:#000066;">Array</span></a></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> =&gt; <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"test"</span>,<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">5</span>+<span style="color:#CC66CC;color:#800000;">3</span><span style="color:#006600; font-weight:bold;">&#41;</span>*<span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Детальнее можно читать в мануале - <a href="http://php.net/manual/en/regexp.reference.php">http://php.net/manual/en/regexp.reference.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://php.southpark.com.ua/2008/recurrent-parentheses-regex/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Как попасть в DMOZ или первый бестолковый пост</title>
		<link>http://php.southpark.com.ua/2007/kak-popast-v-dmoz-ili-pervyj-bestolkovyj-post/</link>
		<comments>http://php.southpark.com.ua/2007/kak-popast-v-dmoz-ili-pervyj-bestolkovyj-post/#comments</comments>
		<pubDate>Mon, 29 Oct 2007 23:32:14 +0000</pubDate>
		<dc:creator>Владимир Лучанинов</dc:creator>
				<category><![CDATA[Офф-топик]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[cake]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[dmoz]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[код]]></category>
		<category><![CDATA[вид]]></category>
		<category><![CDATA[редактор]]></category>

		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/29/kak-popast-v-dmoz-ili-pervyj-bestolkovyj-post/</guid>
		<description><![CDATA[Я ненавижу, когда люди в блогах пишут о том, как им плохо или наоборот хорошо. Есть тема блога, так о ней и пиши, нечего о всяких пятничных кошках рассказывать. И казалось мне, что я до этого никогда не докачусь и будут у меня посты только с кучей кода, который все будут использовать и придёт ко [...]]]></description>
			<content:encoded><![CDATA[<p>Я ненавижу, когда люди в блогах пишут о том, как им плохо или наоборот хорошо. Есть тема блога, так о ней и пиши, нечего о всяких пятничных кошках рассказывать. И казалось мне, что я до этого никогда не докачусь и будут у меня посты только с кучей кода, который все будут использовать и придёт ко всем счастье.</p>
<p>Не тут-то было - я недавно искал ещё полезные сайты о PHP и расстроился, увидев, что русскоязычных ресурсов в DMOZ очень мало. И подал заявку на то, чтобы быть редактором раздела. И меня приняли.</p>
<p>Теперь я почётный редактор раздела <a href="http://www.dmoz.org/World/Russian/Компьютеры/Программирование/Языки/PHP/">World/Russian/Компьютеры/Программирование/Языки/PHP</a>. Я уже успел добавить <a href="http://cake-php.ru/">cake-php.ru</a> о моём любимом фреймворке и ещё несколько более-менее адекватных сайтов, которые тоже подали заявки, но не были рассмотрены так как у раздела не было редактора. Несколько дурацких сайтов удалил. Сейчас разбираюсь, могу ли я добавить свой блог (1. Я аффилиирован с ним; 2. Это всё же блог, а не полноценный сайт) и что делать с сайтами компаний, которые пишут под заказ PHP-скрипты.</p>
<p><strong>А теперь внимание!</strong><br />
Если у вас есть сайт, посвящённый PHP, то перейдите <a href="http://www.dmoz.org/World/Russian/Компьютеры/Программирование/Языки/PHP/">сюда</a>, нажмите ссылку "предложить URL" в верхнем правом углу и заполните анкету. Заранее должен предупредить, что по правилам DMOZ ваш сайт должен иметь интересный контент и большей частью быть посвящённым PHP. А те, кто пишут о Perl, пусть идут в <a href="http://www.dmoz.org/World/Russian/Компьютеры/Программирование/Языки/Perl/">#@$%</a>  <img src='http://php.southpark.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Блоги тоже добавляйте, если их будет действительно много, то можно будет попробовать создать подраздел "Блоги".</p>
<p>Оправдываясь за отсутствие кода в этом посте я обещаю со следующего поста начать разработку учебного проекта на CakePHP в котором покажу от начала до конца как разрабатываю cake-проекты. Думаю, будет интересно не только для новичков в Cake.</p>
]]></content:encoded>
			<wfw:commentRss>http://php.southpark.com.ua/2007/kak-popast-v-dmoz-ili-pervyj-bestolkovyj-post/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Зачем нужно тестирование?</title>
		<link>http://php.southpark.com.ua/2007/zachem-nuzhno-testirovanie/</link>
		<comments>http://php.southpark.com.ua/2007/zachem-nuzhno-testirovanie/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 12:58:16 +0000</pubDate>
		<dc:creator>Владимир Лучанинов</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[simpletest]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/13/zachem-nuzhno-testirovanie/</guid>
		<description><![CDATA[Лет 7 назад я думал, что тестирование - это когда берётся программа и по очереди нажимаются все кнопочки и записывается результат. Для многих, к сожалению, это до сих пор так. Сейчас я понимаю, что основа тестирования - это классные модульные тесты.
Модульные тесты разделяют программу на части и доказывают, что каждая из этих частей работает. А [...]]]></description>
			<content:encoded><![CDATA[<p>Лет 7 назад я думал, что тестирование - это когда берётся программа и по очереди нажимаются все кнопочки и записывается результат. Для многих, к сожалению, это до сих пор так. Сейчас я понимаю, что основа тестирования - это классные модульные тесты.</p>
<p>Модульные тесты разделяют программу на части и доказывают, что каждая из этих частей работает. А это увеличивает вероятность работоспособности программы в целом <img src='http://php.southpark.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
<span id="more-6"></span></p>
<p><strong>Преимущества модульных тестов</strong></p>
<ul>
<li>Создавая модульные тесты, вы больше не будете бояться изменять старый код, боясь что-то там поломать и узнать об этом потом от пользователей. Если вы что-то поломаете, то сразу узнаете об этом и с хорошими тестами даже сразу увидите как исправить ошибку.
<li>Можно будет позволить себе писать чуть меньше документации, отправляя программистов, использующих/поддерживающих ваш код, читать тесты. Из хороших тестов понятно, что делает код и как его можно использовать.
<li>Написание тестов заставляет писать более правильные интерфейсы классов и их взаимодействия. К классам, где всё висит на соплях, просто не получится нормально написать тесты.
</ul>
<p>Естественно, это не панацея, но всё же уровень уверенности в коде и себе значительно увеличивает.</p>
<p>Люди, пишущие модульные тесты, обычно являются приверженцами "Разработки через тестирование" (Test-Driven Development). Основная идея - для добавления функциональности надо сначала написать тест, а потом уже код.</p>
<p><strong>Цикл разработки</strong></p>
<ol>
<li><strong>Добавить тест</strong><br />
Для того, чтобы написать тест, разработчик должен чётко понимать требования к функциональности. Это заставляет хорошо разобраться с тем, как оно должно работать, до того как писать код.</p>
<li><strong>Запустить все тесты и увидеть, что один не работает</strong><br />
Если вы добавили тест на функцональность, которой ещё нет, то тест должен провалиться. Если все тесты работают нормально, то либо кто-то уже реализовал нужную функциональность за вас, либо вы плохо написали тест. К сожалению, первое случается редко.</p>
<li><strong>Написать нужный код</strong><br />
Пишите код для функции, которую вы тестируете. Можно писать как угодно некрасиво и неоптимизированно - главное, чтобы заработал тест.</p>
<li><strong>Рефакторинг</strong><br />
Оптимизируйте код, пока не будете им довольны. Можно смело вносить любые изменения, ведь вы можете проверить всё с помощью тестов.</p>
</ol>
<p>Наиболее распространённые средства для создания модульных тестов для PHP: <a href="http://www.phpunit.de/">PHPUnit</a> и <a href="http://www.simpletest.org/">SimpleTest</a>. Так как я люблю <a href="http://www.cakephp.org">CakePHP</a>, а в нём встроена поддержка SimpleTest, то я использую его.</p>
]]></content:encoded>
			<wfw:commentRss>http://php.southpark.com.ua/2007/zachem-nuzhno-testirovanie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
