<?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>Dinexi&#039;s corner &#187; development</title>
	<atom:link href="http://blog.dinexi.ru/tag/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dinexi.ru</link>
	<description>Блог Станиса Шрамко</description>
	<lastBuildDate>Sat, 28 Jan 2012 11:12:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Что я делаю не так?</title>
		<link>http://blog.dinexi.ru/2009/12/26/chto-ya-delayu-ne-tak/</link>
		<comments>http://blog.dinexi.ru/2009/12/26/chto-ya-delayu-ne-tak/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 02:29:17 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[мысли]]></category>

		<guid isPermaLink="false">http://dinexi.ru/?p=2696</guid>
		<description><![CDATA[Вот тут отдельное исследование по психологии проводить можно. Линукс, знаете ли, коммуна, оно же колхоз. Большинству интересно добавлять фичи (по опыту знаю) и большинству неинтересно заниматься QA. Что вполне естественно. У разработчика в его сборке работает &#8212; ну и нормально. Я тоже так делал даже в коммерческих проектах, но там меня страховал отдел QA с [...]]]></description>
			<content:encoded><![CDATA[<p>Вот тут отдельное исследование по психологии проводить можно. Линукс, знаете ли, коммуна, оно же колхоз. Большинству интересно добавлять фичи (по опыту знаю) и большинству неинтересно заниматься QA. Что вполне естественно. У разработчика в его сборке работает &#8212; ну и нормально. Я тоже так делал даже в коммерческих проектах, но там меня страховал отдел QA с грамотными ребятами. Если есть бага, то мне это дело возвращают, и я начинаю разбираться. Но мне выдают полную диагностику, как воспроизвести, где увидеть, и т.п. Причём, поскольку десктопный софт я не разрабатывал никогда (ну, почти), мне могли дать ссылку на тестовом хосте, а там для диагностики возможности богатые. С десктопами не так. Спокойно случается конфликт и получается нехорошо.<br />
И вот, налетая на проблему в программе, скажем, на плюсах, я часто грешу тем, что спрашиваю у знакомых в чатах: а чего это оно? Естественно, полагая, что для большинства это давно пройденный этап. И вот на моменте, когда я слышу нечто вроде &#8220;А у меня работает! Что я делаю не так?&#8221;, — начинаю злиться. Я не знаю, в чём различие наших конфигураций. Я не маг, и не знаю версий всех библиотек в системе того счастливчика, у которого работает. Более того, я, даже не занимаясь разработкой конкретного продукта, готов выкатить в меру грамотный баг-репорт. Откуда я знаю, что он делает не так, что у него работает. Дальше &#8212; смешнее. Спрашиваю: &#8220;А версия у тебя какая?&#8221; Ну и что вы думаете? Мне оглашают версию не программы, а релиз операционной системы. То есть то, что под той же Ubuntu 9.10 можно спокойно держать любой пиджин, &#8212; это типа нонсенс.<br />
Причём добро бы я был тупым потребителем, который вообще ничего не знает! Ну, дежурно отмазаться от ламера можно и так. Но я вообще-то часто стараюсь диагностировать баг, а иногда даже и поправить, и отдать сообществу. А вот на &#8220;ЧЯДНТ?&#8221; у меня аллергия. Ассоциируется со словами какого-то разработчика KDE, который публично заявил, что не видит смысла в тестировании (даже unit testing), потому что сообщество обозначит ошибки быстрее и эффективнее.</p>
<p>Поэтому я не юзаю KDE. И никогда не буду.</p>
<p>Но, господа, у меня к вам просьба: если нечего сказать окромя того, что у вас работает, &#8212; не говорите вы ничего. Не будете казаться идиотами и детьми. К тому же, мне чаще интереснее решение в общем виде, то есть патчить и смотреть код в случае чего лично мне будет не лень. Ага, и патчи ответственному за пакет отправлять &#8212; тоже не лень. Это колхоз, а не богадельня. И уж тем более не экскурсия в дурдом, где у некоторых психов что-то не работает. Это стремительно развивающаяся система, ошибки в которой неизбежны.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/12/26/chto-ya-delayu-ne-tak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP-проекты: пути развития</title>
		<link>http://blog.dinexi.ru/2009/08/04/php-proekty-puti-razvitiya/</link>
		<comments>http://blog.dinexi.ru/2009/08/04/php-proekty-puti-razvitiya/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 22:17:01 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[мысли]]></category>
		<category><![CDATA[цитата]]></category>

		<guid isPermaLink="false">http://dinexi.ru/?p=2500</guid>
		<description><![CDATA[…другое дело, что у коммерческих php-шных проектов, погнавшихся за дешевизной php-программистов, есть два более-менее основных пути развития: 1) взяли студентов, разогнали, взяли студентов, разогнали (несколько ещё таких же итераций), перестали гоняться за дешевизной, набрали умных ребят за адекватные деньги и начали работать; 2) взяли студентов, разогнали, взяли студентов, разогнали (несколько ещё таких же итераций), перестали [...]]]></description>
			<content:encoded><![CDATA[<p>…другое дело, что у коммерческих php-шных проектов, погнавшихся за дешевизной php-программистов, есть два более-менее основных пути развития: 1) взяли студентов, разогнали, взяли студентов, разогнали (несколько ещё таких же итераций), перестали гоняться за дешевизной, набрали умных ребят за адекватные деньги и начали работать; 2) взяли студентов, разогнали, взяли студентов, разогнали (несколько ещё таких же итераций), перестали гоняться за дешевизной и перешли на питон/джаву/.net/whatever.<br />
Ключевое и там, и там именно «перестали гоняться за дешевизной».<br />
А сам PHP ни в чём не виноват. Просто строить на нём энтерпрайз глупо, а небольшие сайты — дешевле. Это, примерно, так же, как ООП: в маленьком проекте очень часто нафиг не нужно. А в большом всё ж таки помогает, зачастую серьёзно.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/08/04/php-proekty-puti-razvitiya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вышел PHP5.3</title>
		<link>http://blog.dinexi.ru/2009/07/02/vyshel-php5-3/</link>
		<comments>http://blog.dinexi.ru/2009/07/02/vyshel-php5-3/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 18:48:55 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=2339</guid>
		<description><![CDATA[The long awaited release of PHP 5.3 is finally here! Bask in the glory of all the new enhancements and go download it to start using it today! Долгожданный релиз PHP 5.3 состоялся!]]></description>
			<content:encoded><![CDATA[<p>The long awaited release of PHP 5.3 is finally here! Bask in the glory of all the new enhancements and go download it to start using it today!</p>
<p>Долгожданный релиз PHP 5.3 <a href="http://www.php.net/archive/2009.php#id2009-06-30-1">состоялся</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/07/02/vyshel-php5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>И ещё раз о слонах&#8230;</title>
		<link>http://blog.dinexi.ru/2009/06/28/i-eshhyo-raz-o-slonax/</link>
		<comments>http://blog.dinexi.ru/2009/06/28/i-eshhyo-raz-o-slonax/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 14:45:41 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[картинки]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=2334</guid>
		<description><![CDATA[…как о символе PHP. Слон, как известно, считается животным мудрым. И вообще, насколько я помню, инкарнацией бога, который мудростью отличался. От других. У жрецов в AD&#38;D мудрость тоже была основным таким качеством. Классическим образчиком такого жреца является братец Тук, он очень любил своих ближних оглоблей отоварить. Я тут не так давно пост писал о мудрости [...]]]></description>
			<content:encoded><![CDATA[<p>…как о символе PHP. Слон, как известно, считается животным мудрым. И вообще, насколько я помню, инкарнацией бога, который мудростью отличался. От других. У жрецов в AD&amp;D мудрость тоже была основным таким качеством. <ins>Классическим образчиком такого жреца является братец Тук, он очень любил своих ближних оглоблей отоварить.</ins></p>
<p>Я тут не так давно пост писал о мудрости и о PHP, в сочетании с ним флоны тут не просто к месту, они тут ломятся по осевой со скоростью километров двести в час. <a href="/zhrecy-programmirovaniya/">Вот</a> он.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/06/28/i-eshhyo-raz-o-slonax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обработчики событий</title>
		<link>http://blog.dinexi.ru/2009/06/21/obrabotchiki-sobytij/</link>
		<comments>http://blog.dinexi.ru/2009/06/21/obrabotchiki-sobytij/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 23:40:15 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=2150</guid>
		<description><![CDATA[События и обработчики событий давно не новость в объектно-ориентированном программировании: общеизвестен паттерн проектирования Observer [1], который используется в изрядном количестве библиотек и программных продуктов. Меня интересует использование этого паттерна в PHP5. Самая простая, классическая реализация этого паттерна наличествует в SPL [2], где этот паттерн определён интерфейсами SplSubject и SplObserver. Простенько, теперь — со вкусом PHP. [...]]]></description>
			<content:encoded><![CDATA[<p>События и обработчики событий давно не новость в объектно-ориентированном программировании: общеизвестен паттерн проектирования Observer <a href="http://en.wikipedia.org/wiki/Observer_pattern">[1]</a>, который используется в изрядном количестве библиотек и программных продуктов. Меня интересует использование этого паттерна в PHP5.<br />
Самая простая, классическая реализация этого паттерна наличествует в <abbr title="Standard PHP Library">SPL</abbr> <a href="http://www.php.net/%7Ehelly/php/ext/spl/main.html">[2]</a>, где этот паттерн определён интерфейсами <a href="http://www.php.net/%7Ehelly/php/ext/spl/interfaceSplSubject.html">SplSubject</a> и <a href="http://www.php.net/%7Ehelly/php/ext/spl/interfaceSplObserver.html">SplObserver</a>. Простенько, теперь — со вкусом PHP.<br />
Во фреймворке Prado <a href="http://www.pradosoft.com">[3]</a> система событий очень мощно развита, недаром он называется «событийно-ориентированным». События порождаются в изрядном количестве, к любому из событий произвольного компонента можно привязать произвольное количество произвольных обработчиков. Естественно, большая часть событий относится к циклу создания страницы как таковой и к действиям пользователя: Prado ориентирован на создание веб-страниц в стиле ASP.NET <a href="http://www.asp.net/">[4]</a> с его концепцией code behind. Хотел было написать, что это единственный из найденных мной фреймворков для PHP5, где события играют важную роль в организации жизненного цикла приложения, но затем вспомнил, что есть ещё и Yii <a href="http://www.yiiframework.com/">[5]</a>, там тоже есть события, реализация очень похожа на реализацию Prado, что неудивительно: автор тот же. Порывшись для уверенности в Google, нашёл фреймворк PHP_Application <a href="http://papple.sourceforge.net/">[6]</a>, но глубоко изучать не стал.<br />
Достаточно удобно сделано навешивание обработчиков на события уровня бизнес-логики в достаточно известном движке блогов WordPress <a href="http://codex.wordpress.org/Plugin_API#Actions">[7]</a>.<br />
Также имеется несколько достаточно простых реализаций диспетчера событий — в частности, Event_Dispatcher <a href="http://pear.php.net/package/Event_Dispatcher">[8]</a>, пакет PEAR.</p>
<p>Мне давно хочется обсудить использование событий в приложениях на PHP. Нужно ли? Осмысленно ли? И, если ответ на первые два вопроса утвердительный, то где, в каких случаях? Лично мне кажется, что в событийно-ориентированных приложениях удобно расширять функционал, но они сложны как в проектировании, так и в тестировании. События могут использоваться как дополнительная «фишка» фреймворка, но быть краеугольным камнем, на котором построен весь функционал приложения, они не должны. Причин тому несколько:</p>
<ol>
<li>глядя на диаграммы и на код, мы не видим, что происходит параллельно вызовам тех или иных методов, то есть изменение состояния системы для нас неочевидно;</li>
<li>в этой связи нам необходимо очень внимательно добавлять и удалять обработчики событий: повесить два обработчика одного и того же события или не повесить ни одного очень легко, а искать ошибку такого рода очень сложно;</li>
<li>сложность проектирования самих классов событий очень велика, так как заставляет в событии размещать всю возможную информацию, которая может понадобиться обработчику; либо нам нужно «вытаскивать» необходимые данные субъекта в обработчике.</li>
</ol>
<p>Ваши мнения?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/06/21/obrabotchiki-sobytij/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>В NetBeans IDE 7.0 будет поддержка symfony</title>
		<link>http://blog.dinexi.ru/2009/06/17/v-netbeans-ide-7-0-budet-podderzhka-symfony/</link>
		<comments>http://blog.dinexi.ru/2009/06/17/v-netbeans-ide-7-0-budet-podderzhka-symfony/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 22:16:39 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=2119</guid>
		<description><![CDATA[Нашёл на YS-Pro эту небезынтересную информацию. То есть это уже не PHP EarlyAccess, который появился довольно давно. Это полноценная поддержка PHP в сочетании с поддержкой мощного фреймворка. Мир взял за правило меняться к лучшему.]]></description>
			<content:encoded><![CDATA[<p>Нашёл на <a href="http://ys-pro.com/v-netbeans-ide-70-budet-podderzhka-symfony">YS-Pro</a> эту небезынтересную информацию. То есть <a href="http://www.symfony-project.org/blog/2008/09/11/support-symfony-inclusion-in-netbeans">это</a> уже не PHP EarlyAccess, который появился довольно давно. Это полноценная поддержка PHP в сочетании с поддержкой мощного фреймворка. Мир взял за правило меняться к лучшему.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/06/17/v-netbeans-ide-7-0-budet-podderzhka-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Можешь не писать — не пиши!</title>
		<link>http://blog.dinexi.ru/2009/06/03/mozhesh-ne-pisat-ne-pishi/</link>
		<comments>http://blog.dinexi.ru/2009/06/03/mozhesh-ne-pisat-ne-pishi/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 23:11:41 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=1799</guid>
		<description><![CDATA[В силу специфики своей деятельности последних десяти лет «я часто общаюсь с людьми», которые так и рвутся сотворить свою CMS. Или фреймворк. Я знаю минимум три хороших причины такие штуки сотворить, но куда больше причин основательно изучить какую-нибудь общеизвестную штуку. И даже пришёл к выводу, что если сотворить хочется настолько, что аж руки чешутся и [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.membrana.ru/articles/global/2008/07/17/191600.html"><img style="margin-right: 0.5em;" title="Пещерный человек" src="http://tbn0.google.com/images?q=tbn:3fKgpL4yKz_pWM:http://www.membrana.ru/images/articles/1216308088-1.jpeg" alt="Пещерный человек" align="left"></a>В силу специфики своей деятельности последних десяти лет «я часто общаюсь с людьми», которые так и рвутся сотворить свою CMS. Или фреймворк. Я знаю минимум три хороших причины такие штуки сотворить, но куда больше причин основательно изучить какую-нибудь общеизвестную штуку. И даже пришёл к выводу, что если сотворить хочется настолько, что аж руки чешутся и глаз по ночам сомкнуть не можешь, — что ж, пиши «для себя», никто не мешает. Желательно — в свободное от работы время. Брось на половине, ной всю жизнь про нереализованность своей крутейшей идеи. Но лучше не пытайся впихнуть её в недоделанном виде в существующий проект, если она у тебя не обкатана на десятке-другом задач, написанных «в стол» либо просто для себя. Хочешь быть честным — не подписывай других на масштабный и наверняка неадекватно тобой оцененный риск собственной глупости.<br />
Своя CMS, свой фреймворк — это большие (не вру, видел такое) трудозатраты. То есть на ряде ситуаций, которые автор сразу учёл, полёт будет нормальный. А сделай шаг влево-шаг вправо — и выяснится, что есть ситуации, которых автор не учёл. Пока CMS или фреймворк мало используются, всё путём (и грустный опыт свидетельствует, что единственным). Но как только начинаются нештатные ситуации (а они нередко начинаются в реальной жизни прям-таки с порога), всё зависит от опыта и адекватности автора. Это может быть попытка сразу переписать всё нафиг, но в живом проекте такое нереально; поэтому начинается, как правило, переделка всего на живую нитку. Оно же «подгонка под ответ». Получается хреново, но автор, как правило, этого не видит (опыта мало, а настроение свернуть горы здесь и сейчас как раз молодёжи вполне присуще). Переделка &#8212; это, ко всему, переучивать персонал, менять концепцию, ну и т.п. А переделка, заметим, закрывает только один тип неучтённых ситуаций, на которые мы только что конкретно наступили.<br />
А сколько их ещё впереди? В итоге CMS или фрейм в плане архитектуры штормит так, что данное поделие программным продуктом назвать-то нельзя, это просто воплощённый кошмар. А дальше следует неизбежное: после десяти-двадцати проектов все понимают, что это решение проще выкинуть на помойку, потому что это не программный продукт, в натуре, это дерьмо в проруби. И начинается выбор чего-нибудь проверенного и известного, пусть и не очень хорошего, пусть и не супер-пупер. Но надёжного. Приблизительно так наши солдаты используют &#8220;калашников&#8221;: да, не идеален, но даёт вполне предсказуемый средний результат, в отличие от крутейшей снайперской винтовки, которую в полевых условиях никак не отремонтировать, да и патронов к ней взять, в целом, негде.<br />
В целом, работает Общий Закон Эволюции: каждый человек повторяет путь своих предков от эпохи к эпохе. Каменный век, бронзовый век и т.п. Начинаем с процедурного программирования и примитивнейших инклюдов, приходим к OOP и основнательно утоптанных «под себя» MVC/MVP (пройдя, как правило, стадии: 1) фанатизма по поводу OOP; 2) понимания, что это не «волшебная пуля»; 3) фанатизма по поводу паттернов; 4) понимания, что это не «волшебная пуля», — то есть, обобщая, стадии увлечения чем угодно, лишь бы жить и не работать, с неизбежными последующими периодами дикой тоски потому, что так не получается).</p>
<p>Заранее предчувствую ехидный вопрос ко мне. Да, такой опыт я получал сам, вышеизложенное попробовал на своей шкуре. Но есть разница: я писал очень простой фреймворк, который не сильно-то и усложнился за несколько лет. И ещё одна разница: он изначально был заточен на то, чтобы: а) самого фрейма практически не было; б) кода итогового приложения было минимум; в) чтобы больше было задач, которые библиотеками (общеизвестными, хорошо документированными и т.п.) оперативно решаются. Почему так? <em>А потому что мне сразу надо было получить средство, с помощью которого я могу решать как можно больше задач, не меняя своего подхода к процессу разработки, раз; и потому, что мне не хочется много-много стандартных вещей реализовывать самостоятельно, два.</em> А в подавляющем большинстве как CMS, так и фреймворков, подход сугубо противоположный: автор видит картину своего «идеального проекта», которую сначала набрасывает наскоро, а потом, с течением времени, воплощает в жизнь. Лично я уже три года, кажется, тяну и тяну одну идею. Идея одна, реализация в ближайшие дни, скорее всего, возникнет третья по счёту, благо основательный фундамент в виде готового кода и масштабного опыта эксплуатации этой штуки у меня уже есть. Самый смех в том, что приложения останутся практически полностью совместимы.</p>
<p>Начнём-с.</p>
<p><sub>P.S. Картинка кликабельна.</sub></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/06/03/mozhesh-ne-pisat-ne-pishi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>О конструкторах</title>
		<link>http://blog.dinexi.ru/2009/05/27/o-konstruktorax/</link>
		<comments>http://blog.dinexi.ru/2009/05/27/o-konstruktorax/#comments</comments>
		<pubDate>Wed, 27 May 2009 12:47:10 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=1748</guid>
		<description><![CDATA[Опять тревога и батальон уходит в бой… Давайте разберёмся с, казалось бы, одним из фундаментальных понятий в ООП PHP5, а именно с конструкторами и деструкторами, а то, как выяснилось, эта тема не совсем очевидна. class Test { private $_arg = "no arg"; function __construct($arg) { print "I'm constructor: $arg\n"; $this-&#62;_arg = $arg; } function __destruct() [...]]]></description>
			<content:encoded><![CDATA[<p>Опять тревога и батальон уходит в бой…</p>
<p>Давайте разберёмся с, казалось бы, одним из фундаментальных понятий в ООП PHP5, а именно с конструкторами и деструкторами, а то, как выяснилось, эта тема не совсем очевидна.</p>
<pre lang="php">
class Test {
    private $_arg = "no arg";
    function __construct($arg) {
        print "I'm constructor: $arg\n";
        $this-&gt;_arg = $arg;
    }
    function __destruct() {
        print "I'm destructor: $this-&gt;_arg\n";
    }
}
function iLoveExceptions() {
    throw new Exception("Ha ha!");
}
try {
    $a = new Test(iLoveExceptions());
}
catch(Exception $e) {
    print "Exception!!\n";
}
</pre>
<p>В итоге мы получаем следующий вывод:</p>
<pre>I'm destructor: no arg
Exception!!</pre>
<p>Почему так происходит?</p>
<p>Начнём с того, что new — оператор, а операндом является класс и параметры для его конструктора. Следовательно, выполнение этого оператора происходит в два этапа:</p>
<ol>
<li>выделение памяти под объект и инициализация значений его полей по умолчанию;</li>
<li>инициализация объекта при помощи конструктора (если таковой имеется).</li>
</ol>
<p>В данном случае до второго шага мы не доходим, так как исключение вылетает до начала инициализации объекта (то есть между первым и вторым этапами), в момент подготовки параметров конструктора.<br />
Далее мы видим, что деструктор вызывается до обработки исключения. Тоже правильно: на объект не осталось ссылок и он становится интересен сборщику мусора. Заметим: <em>не каждый вызов деструктора предваряется вызовом конструктора</em>.</p>
<p>Естественно, после вылетевшего эксепшна переменная $a остаётся равна NULL, так как до присваивания дело ещё не дошло.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/05/27/o-konstruktorax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: обратный процесс?..</title>
		<link>http://blog.dinexi.ru/2009/04/19/php-obratnyj-process/</link>
		<comments>http://blog.dinexi.ru/2009/04/19/php-obratnyj-process/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 02:02:21 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=1404</guid>
		<description><![CDATA[Zend is now offering PHP training for experienced programmers looking to develop in PHP. У меня плавно отвалилась челюсть. Не, я понимаю, что маркетинг и все дела, но вообще-то в голове у меня сложилось устойчивое впечатление, что опытные программисты в основном валят с PHP любой версии из-за его неконсистентности — туда, где ход проектов хорошо [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://feeds.feedburner.com/~r/ZendDeveloperZone/~3/271493609/3399-Zend-Quick-Start-PHP-for-Experienced-Programmers">Zend is now offering PHP training for experienced programmers looking to develop in PHP.</a></p>
<p>У меня плавно отвалилась челюсть. Не, я понимаю, что маркетинг и все дела, но вообще-то в голове у меня сложилось устойчивое впечатление, что опытные программисты в основном <u>валят</u> с PHP любой версии из-за его неконсистентности — туда, где ход проектов хорошо прогнозируется, где работают в массе своей такие же опытные программисты, ну и так далее, и тому подобное. А вот что может пользоваться спросом тренинг для опытных программистов, каждый из которых, по идее, может за несколько дней прочесть документацию и начать на PHP работать — если, конечно, не побрезгует, и если, конечно, сочтёт это направление работы достаточно денежным (сравним средние зарплаты программиста на PHP и программиста на Java, скажем), — это мне как-то в голову не приходило, да и сейчас не очень в ней укладывается. Скажите мне, пожалуйста, люди добрые, зачем <em>опытному</em> программисту нужен PHP? Что тогда это вообще за такое мифическое понятие — опытный программист? Которому нужен платный тренинг, чтобы освоить язык, на котором худо-бедно дети начинают писать за неделю?</p>
<p>В общем, я в прострации.</p>
<p>Я понимаю, что можно учить опытного программиста, который всю жизнь писал системные утилиты или какие-нибудь бухгалтерские программы, веб-программированию как таковому. То есть объяснять, что такое HTTP, что это протокол без сохранения состояния, что есть только эмуляция засчёт кук и/или сессий, объяснять про языки разметки, про виды веб-серверов, про то, чем отличаются десктопные приложения от веб-приложений. Но. Если человек всё это знает, то чему можно &#8220;ускоренно учить&#8221; на таком тренинге &#8212; я теряюсь в догадках.</p>
<p>[tag]PHP[/tag]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/04/19/php-obratnyj-process/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Управление зависимостями в PHP-коде</title>
		<link>http://blog.dinexi.ru/2009/04/19/upravlenie-zavisimostyami-v-php-kode/</link>
		<comments>http://blog.dinexi.ru/2009/04/19/upravlenie-zavisimostyami-v-php-kode/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 20:06:33 +0000</pubDate>
		<dc:creator>Dinexi</dc:creator>
				<category><![CDATA[главная]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ссылки]]></category>
		<category><![CDATA[цитата]]></category>

		<guid isPermaLink="false">http://lambda.nav.academ.org/?p=1380</guid>
		<description><![CDATA[Простота – чем меньше архитектурных решений, тем лучше. 1 класс, который решает ровно одну проблему здесь и сейчас, возможно, лучше, чем набор из 1 класса, 3-х декораторов, одной фабрики и одного фасада, которые в будущем помогут решить 5 схожих проблем. Убей Бог, не помню, кидал ли я в блог ссылку на эту публикацию или нет, [...]]]></description>
			<content:encoded><![CDATA[<p><q>Простота – чем меньше архитектурных решений, тем лучше. 1 класс, который решает ровно одну проблему здесь и сейчас, возможно, лучше, чем набор из 1 класса, 3-х декораторов, одной фабрики и одного фасада, которые в будущем помогут решить 5 схожих проблем.</q></p>
<p>Убей Бог, не помню, кидал ли я в блог ссылку на эту публикацию или нет, но для подавляющего большинства знакомых мне программистов на PHP это чистой воды must read, must understand &#038; must use в одном флаконе. Флакон небольшой, можно принять залпом, а затем перечитать.</p>
<p>Вот эта <a href="http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code">публикация</a>.</p>
<p>Кстати, возможно, её прочтение излечит молодых программистов от гордых заявлений: &#8220;Я похачил XXX!!!&#8221; Лично я подобные высказывания и формулирую иначе, и тяжёлым вздохом сопровождаю. Иногда действительно приходится хачить, но это отнюдь не показатель ни моей квалификации, ни качества проекта. &#8220;Пришлось&#8230;&#8221; — и очи долу.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dinexi.ru/2009/04/19/upravlenie-zavisimostyami-v-php-kode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

