<?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>Паутина фриланса &#187; PHP</title>
	<atom:link href="http://zlob.in/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://zlob.in</link>
	<description>Information must be free</description>
	<lastBuildDate>Mon, 06 Jun 2011 12:42:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Законы программирования</title>
		<link>http://zlob.in/2011/zakony-programmirovaniya/</link>
		<comments>http://zlob.in/2011/zakony-programmirovaniya/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 15:29:43 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Мысли вслух]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=1040</guid>
		<description><![CDATA[Любое приложение устаревает сразу после установки. Легче изменить спецификацию, чтобы она соответствовала приложению, чем наоборот. Если приложение оказалось полезным, его изменят в следующей версии. Если приложение бесполезно, у него есть полная документация. Только десять процентов кода в приложении когда-нибудь выполняется. Программное обеспечение склонно потреблять все доступные ресурсы. Любая нетривиальная программа содержит хотя бы одну ошибку. [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>Любое приложение устаревает сразу после установки.</li>
<li>Легче изменить спецификацию, чтобы она соответствовала приложению, чем наоборот.</li>
<li>Если приложение оказалось полезным, его изменят в следующей версии.</li>
<li>Если приложение бесполезно, у него есть полная документация.</li>
<li>Только десять процентов кода в приложении когда-нибудь выполняется.</li>
<li>Программное обеспечение склонно потреблять все доступные ресурсы.</li>
<li>Любая нетривиальная программа содержит хотя бы одну ошибку.</li>
<li>Вероятность безупречной демонстрации приложения обратно пропорциональна количеству людей ее наблюдавших в возведённое в степень количества денег потраченных на разработку.</li>
<li>Только после того как приложение отработало по крайней мере шесть месяцев, будет обнаружена самая критическая ошибка.</li>
<li>Количество трудно-обнаружимых ошибок бесконечно, в отличие от легко-обнаружимых ошибок, которые ограничены по определению.</li>
<li>Если в приложении нет ошибок, значит им никто не пользуется.</li>
<li>Усилие, требуемое для исправления ошибки, увеличивается экспоненциально со временем.</li>
<li>Сложность приложения растет, пока она не превышает способности команды программистов, которые должны его поддерживать.</li>
<li>Любой Ваш код, в который Вы не заглядывали несколько месяцев, будет выглядеть так как будто его писали не Вы.</li>
<li>Чем раньше вы начнете кодирование, тем больше времени это займет.</li>
<li>Небрежно спланированный проект продолжается в три раза дольше чем планировалось; тщательно спланированный проект только в два раза дольше.</li>
<li>Приложения никогда не готово меньше чем на 90% и никогда больше чем на 95%.</li>
<li>Автоматизация беспорядка приводит к автоматизированному бардаку.</li>
<li>Пользователи действительно не знают того, чего они хотят от приложения, пока они не попробуют его в действии.</li>
</ul>
<p>Взято отсюда: <a href="http://mphome.dp.ua/page/4/">http://mphome.dp.ua/page/4/</a><br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2009/poleznye-internet-servisy/" rel="bookmark" title="30 апреля 2009">Полезные интернет-сервисы</a></li>
<li><a href="http://zlob.in/2008/xss-sdox-dobem/" rel="bookmark" title="9 мая 2008">XSS сдох? Добьем!</a></li>
<li><a href="http://zlob.in/2008/polezno-pochitat/" rel="bookmark" title="21 сентября 2008">Полезно почитать</a></li>
<li><a href="http://zlob.in/2008/104/" rel="bookmark" title="24 сентября 2008">WordPress 2.7</a></li>
<li><a href="http://zlob.in/2009/infy-takie-zabavnye-infy/" rel="bookmark" title="7 апреля 2009">Инфы, такие забавные инфы</a></li>
</ul>
<p><!-- Similar Posts took 2.770 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2011/zakony-programmirovaniya/feed/</wfw:commentRss>
		<slash:comments>75</slash:comments>
		</item>
		<item>
		<title>HipHop for PHP</title>
		<link>http://zlob.in/2010/hiphop-for-php/</link>
		<comments>http://zlob.in/2010/hiphop-for-php/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 05:04:39 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[web-разработки]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=642</guid>
		<description><![CDATA[Буквально на днях Facebook обнародовали свой проект HipHop for PHP. Почему такое название непонятно, видимо разработчики неровно дышат к ХипХопу ) И php превращается, превращается php в &#8230; C++ За счёт этого разработчикам из фейсбука удалось ускорить выполнение php-сценариев в два раза, что позволит сэкономить на покупке новых серверов и оборудования. Особенно порадовал тот факт, [...]]]></description>
			<content:encoded><![CDATA[<p>Буквально на днях Facebook обнародовали свой проект <strong>HipHop for PHP</strong>. Почему такое название непонятно, видимо разработчики неровно дышат к ХипХопу )</p>
<p>И php превращается, превращается php в &#8230; C++ За счёт этого разработчикам из фейсбука удалось ускорить выполнение php-сценариев в два раза, что позволит сэкономить на покупке новых серверов и оборудования.</p>
<p>Особенно порадовал тот факт, что всё исходные коды проекта HipHop выложены в свободный доступ и в разработке продукта могут принять участие все желающие.</p>
<p>В новостных лентах пишут о том, что разработка заняла два года и было написано 300 тыс. строк кода. А вот интересно сколько людей было занято в разработке. Кстати, вот в <a href="http://pro100pro.com/uskoryaem-php-s-hiphop" target="_blank">этом</a> блоге подробно расписано про этот самый HipHop.</p>
<p><em>HipHop PHP Yo!</em> )<br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2008/bud-proshhe/" rel="bookmark" title="25 ноября 2008">Будь проще</a></li>
<li><a href="http://zlob.in/2011/arxitektury-sajtov-s-vysokoj-nagruzkoj/" rel="bookmark" title="2 февраля 2011">Архитектура сайтов с высокой нагрузкой</a></li>
<li><a href="http://zlob.in/2010/trebuetsya-flash-developer/" rel="bookmark" title="13 июля 2010">Требуется FLASH-developer</a></li>
<li><a href="http://zlob.in/2008/microsoft-vs-yahoo-kto-kogo/" rel="bookmark" title="6 мая 2008">Microsoft vs Yahoo кто кого?</a></li>
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch2-xaki-na-php/" rel="bookmark" title="18 мая 2008">Ускоряем работу скриптов ч.2 (хаки на PHP)</a></li>
</ul>
<p><!-- Similar Posts took 2.822 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2010/hiphop-for-php/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Kohana &#8211; php framework</title>
		<link>http://zlob.in/2009/kohana-php-framework/</link>
		<comments>http://zlob.in/2009/kohana-php-framework/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 04:33:17 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[web-разработки]]></category>
		<category><![CDATA[kohana]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=401</guid>
		<description><![CDATA[На данный момент я довольно плотно подсел на этот фреймворк (kohana). Кохана на начальном этапе представлял из себя лишь ответвление от другого фреймворка CodeIgniter. Основные их отличия заключались в отсутствии поддержки со стороны kohana php версии меньшее 5.2 и поддержка строгого ООП. Более подробно с историческими сведениями Вы можете ознакомится в википедии. Introduction. С чего [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://zlob.in/wp-content/uploads/2009/09/123321123.jpg"><img class="size-medium wp-image-405 alignright" title="php kohana" src="http://zlob.in/wp-content/uploads/2009/09/123321123-300x150.jpg" alt="php kohana" width="300" height="150" /></a>На данный момент я довольно плотно подсел на этот фреймворк (<em>kohana</em>). Кохана на начальном этапе представлял из себя лишь ответвление от другого фреймворка <em>CodeIgniter</em>. Основные их отличия заключались в отсутствии поддержки со стороны kohana php версии меньшее 5.2 и поддержка строгого ООП. Более подробно с историческими сведениями Вы можете ознакомится в <a href="http://ru.wikipedia.org/wiki/Kohana" target="_blank">википедии</a>.</p>
<h2>Introduction. С чего начать?</h2>
<p>Прежде всего нужно отметить, что на данный момент есть две очень сильно различающиеся версии коханы. Ветка 2.4 &#8211; логическое продолжение ветки 2.3 и ветка 3.x &#8211; полностью переписаная версия. В третьей версии поменялось все, кроме, пожалуй, скорости. Именно скоростью своей работы меня и пленил этот фреймворк. Если Вы хотите идти в ногу со временем, то стоит присматриваться именно к KO3, однако к нему нет еще полной документации и разрабатывать приходится на ощупь. Но в этом есть свои плюсы &#8211; приходится подробно просматривать исходники ядра.</p>
<h2>Какие плюсы?</h2>
<ul>
<li>Полная поддержка utf-8;</li>
<li>HMVC модель (в третьей версии);</li>
<li>строгая поддержка ООП;</li>
<li>экстремальная быстрота работы.</li>
</ul>
<h2>Где есть наши?</h2>
<p>К сожалению в рунете довольно мало информации о kohana. Блоги можно пересчитать по пальцам. Я приведу здесь ссылки на те блоги, которые мне удалось найти. Если Вы знаете хороший блог о Kohana, но его нет в этом списке &#8211; сообщите об этом в комментах.</p>
<ul>
<li>Прежде всего нужно отметить <a href="http://habrahabr.ru/blogs/kohanaphp/" target="_blank">блог на Хабре</a>. Туда всегда попадают самые интересные публикации;</li>
<li>блог<a href="http://brotkin.ru " target="_blank"> Броткина Ивана</a>. Именно с этого блога я начал изучение kohana 2.3.3;</li>
<li>блог <a href="http://kupreev.com/" target="_blank">Александра Купреева</a>. Помимо того, что автор пишет статьи на русском о Kohana, так еще и переводит их на английский;</li>
<li>еще один довольно интересный блог. Буквально сегодня <a href="http://progik.ru/blog/naskolko-bstree-Kohana3- " target="_blank">вышел пост</a> о сравнении скорости KO3 и KO2;</li>
<li>на <a href="http://kuzya.name/2009/05/28/начальный-практикум-в-kohana/" target="_blank">этом</a> блоге есть всего одна статья о kohana, но для начинающих очень сильно поможет. К сожалению, блог на данный момент не обновляется;</li>
<li>а вот <a href="http://lastage.ru/kohana_nginx.html" target="_blank">здесь</a> описывается настройка kohana и nginx.</li>
</ul>
<p>Ну и конечно же оффсайт <a href="http://www.kohanaphp.com/" target="_blank">http://www.kohanaphp.com</a>. Давайте вместе продвигать этот замечательный фреймворк в массы )<br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2009/ustnovka-nginxeaccelerator-i-obnovlenie-phpmysqlapache-na-centos/" rel="bookmark" title="8 октября 2009">Установка nginx,eaccelerator и обновление php,mysql,apache на CentOS</a></li>
<li><a href="http://zlob.in/2010/optimizaciya/" rel="bookmark" title="8 января 2010">Оптимизация</a></li>
<li><a href="http://zlob.in/2011/avtoportal-cel-1/" rel="bookmark" title="20 апреля 2011">Автопортал &#8211; цель №1</a></li>
<li><a href="http://zlob.in/2009/poleznye-internet-servisy/" rel="bookmark" title="30 апреля 2009">Полезные интернет-сервисы</a></li>
<li><a href="http://zlob.in/2008/xss-sdox-dobem/" rel="bookmark" title="9 мая 2008">XSS сдох? Добьем!</a></li>
</ul>
<p><!-- Similar Posts took 3.128 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2009/kohana-php-framework/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>PHP с MsSQL</title>
		<link>http://zlob.in/2009/php-s-mssql/</link>
		<comments>http://zlob.in/2009/php-s-mssql/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 03:51:19 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=315</guid>
		<description><![CDATA[Недавно возникла необходимость, связать удаленное соединение php с MsSQL 2008. Вроде бы ничего сложного, есть стандартный набор функций. Но при попытке коннекта из php 5.2 к MsSQL 2008 возникла проблема подключения. Используется связка Apache 2.2 + PHP 5.2. Причем к MsSQL 2000 соеднинение шло без проблем. Проблема заключается в библиотеке ntwdblib.dll. Решение как оказалось элементарно [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно возникла необходимость, связать удаленное соединение php с MsSQL 2008. Вроде бы ничего сложного, есть стандартный набор функций. Но при попытке коннекта  из php 5.2 к MsSQL 2008 возникла проблема подключения.  Используется связка Apache 2.2 + PHP 5.2. Причем к  MsSQL 2000 соеднинение шло без проблем.</p>
<p>Проблема заключается в библиотеке ntwdblib.dll. Решение как оказалось элементарно &#8211; необходимо обновить библиотеку. Я скачал её вот с этого с <a href="http://www.dlldll.com/ntwdblib.dll_download.html" target="_blank">сайта</a>, обновил и все заработало.<br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2009/ustnovka-nginxeaccelerator-i-obnovlenie-phpmysqlapache-na-centos/" rel="bookmark" title="8 октября 2009">Установка nginx,eaccelerator и обновление php,mysql,apache на CentOS</a></li>
<li><a href="http://zlob.in/2010/optimizaciya/" rel="bookmark" title="8 января 2010">Оптимизация</a></li>
<li><a href="http://zlob.in/2011/utilita-bcp-dlya-eksportaimporta-v-mssql/" rel="bookmark" title="26 января 2011">Утилита BCP для экспорта\импорта в MSSQL</a></li>
<li><a href="http://zlob.in/2009/centos/" rel="bookmark" title="22 сентября 2009">CentOS</a></li>
<li><a href="http://zlob.in/2011/uuid-v-mysql/" rel="bookmark" title="27 февраля 2011">UUID в MySQL</a></li>
</ul>
<p><!-- Similar Posts took 2.662 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2009/php-s-mssql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>UTF и проблема с русскими буквами И, ш</title>
		<link>http://zlob.in/2009/utf-i-problema-s-russkimi-bukvami-i-sh/</link>
		<comments>http://zlob.in/2009/utf-i-problema-s-russkimi-bukvami-i-sh/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:19:07 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=148</guid>
		<description><![CDATA[Довелось мне писать online-chat на php. Суть чата заключается в следующем. Через ajax шла передача данных, которые были в xml формате. Далее скрипт их обрабатывал и выводил на экран. И иногда вылазила непонятная ошибка, которая приводила к тому, что браузер InternetExplorer не хотел вообще принимать данные из БД, т.е. показывал пустое окно. Долго я парился [...]]]></description>
			<content:encoded><![CDATA[<p>Довелось мне писать online-chat на php. Суть чата заключается в следующем. Через ajax шла передача данных, которые были в xml формате. Далее скрипт их обрабатывал и выводил на экран. И иногда вылазила непонятная ошибка, которая приводила к тому, что браузер InternetExplorer не хотел вообще принимать данные из БД, т.е. показывал пустое окно.</p>
<p>Долго я парился и не мог выяснить причину. Оказывается, utf8 иногда не корректно понимает русские буквы &laquo;ш&raquo; и &laquo;И&raquo;. В результате появляются какие-то кракозябры типа непонятных символов и знаков вороса.</p>
<p>Решил я проблему заменой букв на html сущности</p>
<p>$str=str_replace(&laquo;И&raquo;,&raquo;&amp;#1048;&raquo;,$str);<br />
$str=str_replace(&laquo;ш&raquo;,&raquo;&amp;#1096;&raquo;,$str);</p>
<p>Различные услуги в столице России. <a href="http://uslugi.slando.ru/">услуги москва.</a><br />
Скоро свадьба?<a href="http://www.nevesta.info/interesting/magic/goroskop/"> свадьба гороскоп. </a>Наш гороскоп вам поможет.<br />
Купи часы. <a href="http://www.kupi-chasi.ru/Christian_Dior.html">кристиан</a> диор и другие известные бренды.<br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch3/" rel="bookmark" title="22 мая 2008">Ускоряем работу скриптов ч.3</a></li>
<li><a href="http://zlob.in/2008/legalizaciya-v-seti/" rel="bookmark" title="5 октября 2008">Легализация в сети</a></li>
<li><a href="http://zlob.in/2011/utilita-bcp-dlya-eksportaimporta-v-mssql/" rel="bookmark" title="26 января 2011">Утилита BCP для экспорта\импорта в MSSQL</a></li>
<li><a href="http://zlob.in/2009/html-5-ne-za-gorami/" rel="bookmark" title="29 июля 2009">HTML 5 не за горами</a></li>
<li><a href="http://zlob.in/2009/prosmotr-filmov-online/" rel="bookmark" title="14 июня 2009">Просмотр фильмов online</a></li>
</ul>
<p><!-- Similar Posts took 2.656 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2009/utf-i-problema-s-russkimi-bukvami-i-sh/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Ускоряем работу скриптов ч.3</title>
		<link>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch3/</link>
		<comments>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch3/#comments</comments>
		<pubDate>Thu, 22 May 2008 08:43:17 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=22</guid>
		<description><![CDATA[Ускоряем работу скриптов ч.1 Ускоряем работу скриптов ч.2 Ну вот и третья часть. Перейдем сразу к делу. 8 ) Использование двойных и одинарных кавычек. Что дают нам двойные кавычки? PHP сможет распознавать управляющие последовательности и переменные. В отличии от двойных кавычек, строка в одинарных распознается только как строка и переменные в ней будут являться лишь [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Ускоряем работу скриптов ч.1" href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/">Ускоряем работу скриптов ч.1</a><br />
<a title="Ускоряем работу скриптов ч.2 (хаки на PHP)" href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch2-xaki-na-php/">Ускоряем работу скриптов ч.2</a><br />
Ну вот и третья часть. Перейдем сразу к делу.</p>
<p>8 ) <strong>Использование двойных и одинарных кавычек.<br />
</strong>Что дают нам двойные кавычки? PHP сможет распознавать управляющие последовательности и переменные. В отличии от двойных кавычек, строка в одинарных распознается только как строка и переменные в ней будут являться лишь частью её. Т.е. на обработку строки, заключенную в двойные кавычки будет уходить несколько больше времени, чем на обработку с одинарными.</p>
<pre><code>echo "hallo $name $fam";
echo 'hallo ' . $name . ' ' . $fam;
</code></pre>
<p>Что же использовать? Всё зависит от ситуации. Я всегда использую одинарные кавычки, а вот для SQL-запросов двойные, лично мне так удобнее.</p>
<p>9) <strong>Замена.</strong><br />
Если новичек добирается до регулярных выражений, то это чревато тем, что он будет везде использовать их, даже там, где можно обойтись. В частности str_replace работает быстрее, чем preg_replace, в свою очередь strtr ещё быстрее, чем str_replace.</p>
<pre><code>// Замена переменных в шаблоне
$text = ereg_replace("&lt;!--a--&gt;", $a, $text);
$text = ereg_replace("&lt;!--b--&gt;", $b, $text);
$text = ereg_replace("&lt;!--c--&gt;", $c, $text);
$text = ereg_replace("&lt;!--d--&gt;", $d, $text);</code></pre>
<pre><code>// Это по меньшей мере ужасно, но встречается очень часто.
// Оптимизируем и получаем одну строку:
$text = str_replace(array('&lt;!--a--&gt;', '&lt;!--b--&gt;', '&lt;!--c--&gt;', '&lt;!--d--&gt;'),
array($a, $b, $c, $d), $text);</code></pre>
<p>10) <strong>Функция в функции.</strong><br />
Покажу на примере и всё станет ясно. Предположим, нам нужно убрать пробелы у строки и вырезать первые 5 символов:</p>
<pre><code>$str = trim($str);
$str = substr($str, 0, 5);</code></pre>
<p>Давайте сожмем всё это дело:</p>
<pre><code>$str = substr(trim($str), 0, 5);</code></pre>
<p>Другой вопрос, что при этом ухудшается читаемость кода, причем это далеко не самый сложный пример. А при использовании сразу нескольких функций в функциях и более громоздком выражении мы получаем очень не удобоваримую строку кода. Поэтому тут нужно выбирать &#8211; либо максимальная оптимизация, либо читабельность кода.</p>
<p>11) <strong>Подключение файлов.</strong><br />
Для внедрения в код php сторонних файлов есть целых четыре конструкции: include, include_once, require, require_once.</p>
<p>include: инклудит файл во время исполнения сценария.<br />
require: при запуске (НЕ при исполнении) происходит замена конструкции require. Причем, если этот файл уже был подключен, то новое подключение не произойдет.</p>
<p>Функции с _once проверяют был ли до этого уже подключен данный файл. На данный момент особой разницы в скорости нет, поэтому используйте их по назначению.</p>
<p>12) <strong>Интересные последствия.</strong><br />
Если и дальше пытаться упаковать как можно больше код, то можно встретиться с непонятными явлениями.</p>
<p>Учитывая, что в официальной документации по PHP в Главе 14 написано:</p>
<blockquote><p>&laquo;Выражения &#8211; это краеугольный камень PHP. Почти все, что вы пишите в PHP, является выражением. Самое простое и точное определение выражения &#8211; `все что угодно, имеющее значение`. &laquo;</p></blockquote>
<p>Следовательно я могу использовать конструкции типа &amp;&amp; (логическое AND), || (логичекое OR) и пр.</p>
<p>Рассмотрим один примерчик:</p>
<pre><code>$var = 0;
$sp = 0;
if ($var == 0) $sp = 3 AND $var = 2;
echo "sp = $sp &lt;br /&gt;";
echo "var = $var";</code></pre>
<p>Здесь мы вместо использования фигурных скобок при выполнении двух действий, объединили их оператором AND.</p>
<p>В итоге мы получаем:<br />
sp = 3<br />
var = 2</p>
<p>Ещё один непонятный прикол случается с тернарным оператором (кстати, это название он получил от того, что имеет сразу три операнда):<br />
условие ? действие_1 : действие_2;</p>
<p>Если в &laquo;действии&raquo; я захочу использовать echo,</p>
<pre><code>true ? echo 'не работает' : 0 ;</code></pre>
<p>то у меня ничего не выйдет и вылезет ошибка:</p>
<p><code>Parse error: parse error, unexpected T_ECHO</code><br />
Проблема кроется здесь в том, что</p>
<blockquote><p>Поскольку echo &#8211; это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций</p></blockquote>
<p>А print может вести себя как обыная функция. Поэтому приходится применять хак <img src='http://zlob.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  будем вместо echo использовать print:</p>
<pre><code>true ? print 'работает' : 0 ;</code></pre>
<p>Соотвественно мы не сможем использваоть такую конструкцию true ? if () &#8230; или например, false ? for ($i = 0 &#8230;)</p>
<p>Несколько слов по поводу isset. Не многие знают, что можно одновременно проверять существование сразу нескольких переменных isset($a, $b).</p>
<p>На этом пока всё. Если придумаю ещё что-нибудь, то обязательно выйдет новая часть.</p>
<p><!-- sig2feed --><br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/" rel="bookmark" title="16 мая 2008">Ускоряем работу скриптов ч.1</a></li>
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch2-xaki-na-php/" rel="bookmark" title="18 мая 2008">Ускоряем работу скриптов ч.2 (хаки на PHP)</a></li>
<li><a href="http://zlob.in/2010/youtube-api-javascript-upload/" rel="bookmark" title="26 июня 2010">YouTube API &#038; JavaScript Upload</a></li>
<li><a href="http://zlob.in/2009/utf-i-problema-s-russkimi-bukvami-i-sh/" rel="bookmark" title="21 января 2009">UTF и проблема с русскими буквами И, ш</a></li>
<li><a href="http://zlob.in/2011/utilita-bcp-dlya-eksportaimporta-v-mssql/" rel="bookmark" title="26 января 2011">Утилита BCP для экспорта\импорта в MSSQL</a></li>
</ul>
<p><!-- Similar Posts took 4.973 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch3/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Ускоряем работу скриптов ч.2 (хаки на PHP)</title>
		<link>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch2-xaki-na-php/</link>
		<comments>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch2-xaki-na-php/#comments</comments>
		<pubDate>Sun, 18 May 2008 04:25:39 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=19</guid>
		<description><![CDATA[Итак, продолжим. Напомню, что с первой частью этой &#171;саги&#187; можно ознакомиться здесь &#171;Ускоряем работу скриптов ч.1&#171;. 5) Работаем с циклами Далеко ходить не будем, и возьмем уже знакомый по второму пункту пример: $sum = 0; for ($i = 1; $i &#60; 3; $i++) $sum += $i; Теперь давайте постараемся сделать его ещё более компактным. Вот [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, продолжим. Напомню, что с первой частью этой &laquo;саги&raquo; можно ознакомиться здесь &laquo;<a title="php, скорость, скрипты" href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/" target="_blank">Ускоряем работу скриптов ч.1</a>&laquo;.</p>
<p>5) <strong>Работаем с циклами</strong><br />
Далеко ходить не будем, и возьмем уже знакомый по второму пункту пример:</p>
<pre><code>$sum = 0;
for ($i = 1; $i &lt; 3; $i++) $sum += $i;</code></pre>
<p>Теперь давайте постараемся сделать его ещё более компактным. Вот взгляните, как элегантно мы избавляемся от лишнего действия, объединяя сразу два:</p>
<pre><code>for ($i = 1, $sum = 0; $i &lt; 3; $sum += $i++) {};</code></pre>
<p>Таким образом мы заносим всё в цикл. И то, что некоторые пишут используя две-три, а порой пять строчек кода (если учесть фигурные скобки), нам удалось реализовать в одной строке. Компактность, как говориться, налицо.</p>
<p>Далее, предположим, нам <strong>не известно количество элементов</strong> в цикле. Как поступит большинство кодеров?</p>
<pre><code>for ($i = 1; $i &lt; sizeof($array); $i++) {};</code></pre>
<p>получается, пересчет количества элементов цикла будет происходить с каждой итерацией. Оно вам надо? Нет. Тогда поступим следующим образом:</p>
<pre><code>for ($i = 1, $counter = sizeof($array); $i &lt; $counter; $i++) {};
</code></pre>
<p>Иногда разработчик сталкивается с задачей, в которой необходимо реализовать <strong>бесконечный цикл</strong>. Выдумывать ничего не надо, всё элементарно:</p>
<pre><code>while (true) {исполняемый код}
for (;;) {исполняемый код}
</code></pre>
<p>Если же понадобиться <strong>выйти из цикла</strong>, то используется break, причем можно применять с аргументом. Например break 2, что означает выход сразу из двух циклов;<br />
Пример:</p>
<pre><code>for (;;)
for ($a = 0;;$a++) if ($a == 7) break 2;</code></pre>
<p>Если переменная $a получит значение семь, выходим сразу из двух циклов.</p>
<p>Теперь разберемся как работать с ассоциативными массивами. Для начала заведем себе такой массивчик:</p>
<pre><code>$arr = array('one' =&gt; 1, 'two' =&gt; 'dva', 3 =&gt; 'three');</code></pre>
<p>Пробежаться по этому массиву с помощью цикла
<pre><code>for ($i = 0, $counter = count($arr); $i &lt; $counter; $i++)</code></pre>
<p> уже не получиться.<br />
Придется использование foreach, однако, foreach значительно медленнее, чем for.</p>
<pre><code>foreach ($массив as $ключ =&gt; $значение)
действие;
</code></pre>
<p>Предположим, необходимо вывести отдельно ключи и их значения</p>
<pre><code>foreach ($arr as $key =&gt; $value)
echo 'ключ: '. $key. ' значение: '. $value;</code></pre>
<p>Если же нам необходимо получить только значения, то действуем так:<br />
foreach ($arr as $value) echo &#8216;значение: &#8216;. $value;</p>
<p>6) <strong>Обмен значениями двух переменных</strong><br />
На первый взгляд тривиальная задача. И большинство решают её путем заведения третьй переменной:</p>
<pre><code>$var_1 = 2;
$var_2 = 3;

$var_3 = $var_2;
$var_2 = $var_1;
$var_1 = $var_3;</code></pre>
<p>Можно выполнить эту же операцию, не прибегая к третьей переменной.<br />
<em> а) Применяем чистую арифметику</em></p>
<pre><code>$var_1 = $var_1 + $var_2;
$var_2 = $var_1 - $var_2;
$var_1 = $var_1 - $var_2;</code></pre>
<p><em> б) применям XOR</em><br />
Для начала разберемся на примерах как работает логическая операция XOR:<br />
1) A xor A = 0;<br />
2) A xor B = B xor A;<br />
3) A xor (A xor B) = B;</p>
<pre><code>$var_1 = $var_1 ^ $var_2;
$var_2 = $var_2 ^ $var_1;
$var_1 = $var_1 ^ $var_2;</code></pre>
<p>Теперь давайте ещё больше запакуем наш код:</p>
<pre><code>$var_1 ^= $var_2 ^= $var_1 ^= $var_2;</code></pre>
<p>7) <strong>Тернарность (тернарные операторы)</strong><br />
Эта одна из наиболее удобных, но, в то же время, наименее применяемых начинающими конструкций. Выглядит она так:</p>
<p>условие ? действие_1 : действие_2;</p>
<p>Интерпретируется следующим образом: если условие верно, то выполняется действие_1, иначе выполняется действие_2. Для наглядности посмотрим как в большинстве программ выглядит эта же конструкция:</p>
<p>If (условие) действие_1;<br />
else действие_2;</p>
<p>Пример:</p>
<pre><code>isset($_POST['go']) ? $var = 1 : $var = 0;</code></pre>
<p>Поясню. Если существует переменная $go, полученная методом POST, то переменной $var присваиваем значение один, иначе присваиваем значение 0;</p>
<p>Можно использовать и в таком виде:</p>
<pre><code>$sum = $param_1 &gt; $param_2 ? $var_1 : $var_2;</code></pre>
<p>Если переменная $param_1 больше, чем $param_2, то в переменную $sum заносим значение $var_1, иначе заносим значение переменной $var_2;</p>
<p>Если нам нужно лишь проверить условие и выполнить действие только в случае, если оно верно, то можно действовать так:</p>
<pre><code>$param ? $var = 1024 : 0;</code></pre>
<p>если $param равен true, то в переменную $var заносим число 1024, иначе ничего не выполняем.</p>
<p>Замечу, что двоеточие опускать нельзя, в отличие от оператора else.</p>
<p>p.s. и это ещё не всё, ждите продолжения. А пока снова расслабимся, воскресенье сегодня =)</p>
<blockquote><p>Самая продаваемая продукция с логотипом &laquo;ДОМ-2&#8243; &#8211; это мишени.</p></blockquote>
<p><!-- sig2feed --><br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch3/" rel="bookmark" title="22 мая 2008">Ускоряем работу скриптов ч.3</a></li>
<li><a href="http://zlob.in/2011/utilita-bcp-dlya-eksportaimporta-v-mssql/" rel="bookmark" title="26 января 2011">Утилита BCP для экспорта\импорта в MSSQL</a></li>
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/" rel="bookmark" title="16 мая 2008">Ускоряем работу скриптов ч.1</a></li>
<li><a href="http://zlob.in/2010/ustanovka-ape-na-centos/" rel="bookmark" title="16 января 2010">Установка APE на CentOS</a></li>
<li><a href="http://zlob.in/2010/youtube-api-javascript-upload/" rel="bookmark" title="26 июня 2010">YouTube API &#038; JavaScript Upload</a></li>
</ul>
<p><!-- Similar Posts took 2.830 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch2-xaki-na-php/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Ускоряем работу скриптов ч.1</title>
		<link>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/</link>
		<comments>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/#comments</comments>
		<pubDate>Fri, 16 May 2008 13:41:35 +0000</pubDate>
		<dc:creator>Евгений Злобин</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://zlob.in/?p=8</guid>
		<description><![CDATA[Очень часто можно заметить вопросы php-разработчиков по поводу оптимизации кода. По этому поводу ходит много слухов и появляется не меньше споров. Например до сих пор спорят что лучше использовать echo или print. Поэтому давайте начнем со всего по порядку. Сразу отмечу, что некоторые из этих советов идут в разрез с читабельностью кода, поэтому решать что [...]]]></description>
			<content:encoded><![CDATA[<p>Очень часто можно заметить вопросы php-разработчиков по поводу оптимизации кода. По этому поводу ходит много слухов и появляется не меньше споров. Например до сих пор спорят что лучше использовать <code>echo</code> или <code>print</code>.</p>
<p>Поэтому давайте начнем со всего по порядку. Сразу отмечу, что некоторые из этих советов идут в разрез с читабельностью кода, поэтому решать что важнее именно вам.</p>
<p>1) <strong>echo быстрее print</strong><br />
На данный момент мало актуальный совет. Особенно, если вы приверженец ООП. Однако следует отметить, что ни echo, ни print не являются функциями, они есть ни что иное, как языковые конструкции. Однако print может вести себя как функция, что позволяет её использовать в сложных выражениях, например, с применением тернарных операторов( $bool ? print &#8216;true&#8217; : print &#8216;false&#8217;; ), где echo не возможно использовать.</p>
<p>2) <strong>Лишние фигурные скобки</strong><br />
Очень часто приходится видеть подобный код:</p>
<pre><code>if (условие)
{
действие;
}</code></pre>
<p>если выполняется только одно действие, то фигурные скобки можно опустить. Пример:
<pre><code>if (a == 2) $a++;</code></pre>
<p>Хотя это может вызвать некоторые проблемы у начинающих программистов. При необходимости добавить ещё одно действие, можно забыть поставить фигурные скобки и в итоге мы получаем трудно вылавливаемую ошибку:</p>
<pre><code>if (выражение)
действие_1;
действие_2;</code></pre>
<p>Этот же прием касается и других подобных конструкций. Например, циклы:</p>
<pre><code>$sum = 0;
for ($i = 1; $i &lt; 3; $i++) $sum += $i;</code></pre>
<p>3) <strong>Подавление ошибок при помощи оператора @</strong><br />
На мой взгляд, использование @ показывает некомпетентность программиста. Если же действительно нужно скрыть показ ошибок, то можно использовать функцию <code>error_reporting()</code>. Либо использовать die(), если нужно блокировать вывод только в одном месте. Т.о. заместо
<pre><code>$handle = @fopen('data.dat','r');</code></pre>
<p> будем использовать
<pre><code>$handle = fopen('data.dat','r') or die('Возникла ошибка');</code></pre>
<p>Есть ещё более элегантный метод.</p>
<pre><code>try
{
$handle = fopen('data.dat','r')
}
catch (Exception $error)
{
echo 'Возникла ошибка';
}</code></pre>
<p>Если кто-то работал с Delphi, то ему сразу все станет ясно (try &#8230; except &#8230;) для остальных объясняю. В блоке try мы выполняем потенциально сбойный код и при возникновении ошибки будет выполнен код из блока catch, а в переменную $error будет записана полная информация о возникшей ошибке.</p>
<p>Рассмотрим класс Exception:</p>
<pre><code>class Exception
{
protected $message = 'Unknown exception';   // текст ошибки
protected $code = 0;                        // числовой код возникшей ошибки
protected $file;                            // имя файла, в котором возникла ошибка
protected $line;                            // номер строки с ошибкой</code></pre>
<pre><code>function __construct($message = null, $code = 0);</code></pre>
<pre><code>final function getMessage();                // аналогично $message
final function getCode();                   // аналогично $code
final function getFile();                   // аналогично $file
final function getLine();                   // аналогично $line
final function getTrace();                  // содержит массив вызванных функций во время появления ошибки.
final function getTraceAsString();          // возвращает отформатированную строку обо всех вложенных вызовах</code></pre>
<pre><code>function __toString();
}</code></pre>
<p>Код взят из <a href="http://www.php.net/manual/ru/" target="_blank">официальной документации по PHP</a>. Я веду к тому, что разработчик сам может переопределять метод __toString и таким образом создавать свои классы для обработки возникших нештатных ситуаций. Примеры, опять же, можно посмотреть в официальной документации.<br />
Особенно хорош этот метод тем, что у программиста появляется возможность не только показывать свои сообщения об ошибках, но и записывать в log файл полную информацию о нештатных ситуациях.</p>
<p>4) <strong>Инкремент и декремент</strong><br />
Используйте следущую  конструкцию $i++ вместо $i = $i + 1 и соответственно $i&#8211; вместо $i = $i &#8211; 1.<br />
Запомните, что:</p>
<ol>
<li>Инкремент локальной переменной в методе &#8211; самый быстрый. Почти также работает инкремент локальной переменной в функции.</li>
<li>Инкремент глобальной переменной в два раза медленее, чем локальной.</li>
<li>Инкремент свойства объекта (т.е. $this-&gt;prop++) в три раза медленнее, чем локальной переменной.</li>
<li>Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.</li>
</ol>
<p>Да и ещё, есть такие штуки как $i++ и ++$i, однако не многие понимают различия в них. Если результат нужен до инкремента, применяем $i++ иначе ++$i.</p>
<p>p.s. продолжение следует, а пока расслабимся.</p>
<p>Пессимист видит чёрный туннель.<br />
Оптимист видит свет в конце туннеля.<br />
Реалист видит приближающийся поезд.<br />
Машинист видит трёх дураков на рельсах.</p>
<p><!-- sig2feed --><br />
<h3>Может быть Вам это интересно?</h3>
<ul class="similar-posts">
<li><a href="http://zlob.in/2010/youtube-api-javascript-upload/" rel="bookmark" title="26 июня 2010">YouTube API &#038; JavaScript Upload</a></li>
<li><a href="http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch3/" rel="bookmark" title="22 мая 2008">Ускоряем работу скриптов ч.3</a></li>
<li><a href="http://zlob.in/2011/utilita-bcp-dlya-eksportaimporta-v-mssql/" rel="bookmark" title="26 января 2011">Утилита BCP для экспорта\импорта в MSSQL</a></li>
<li><a href="http://zlob.in/2010/ustanovka-ape-na-centos/" rel="bookmark" title="16 января 2010">Установка APE на CentOS</a></li>
<li><a href="http://zlob.in/2009/podklyuchenie-po-ssh/" rel="bookmark" title="2 февраля 2009">Подключение по ssh</a></li>
</ul>
<p><!-- Similar Posts took 17.082 ms --></p>
                <p>&copy; "<a href = "http://zlob.in" tilte = "фриланс, заработок в сети">Паутина фриланса</a>".</p>                        ]]></content:encoded>
			<wfw:commentRss>http://zlob.in/2008/uskoryaem-rabotu-skriptov-ch1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

