<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
			<channel>
			<title>Проксирование псевдовызовов / Блог им. andreyv / Alto CMS</title>
			<link>http://79.174.14.219/comments/339/</link>
			<description><![CDATA[Вчера при обсуждении Alto Coding Style aVadim высказал мысль Вообще, в далекой перспективе мне хотелось бы изменить синтаксис псевдовызовов методов]]></description>
			<language>ru</language>
			<managingEditor>noreply@altocms.ru</managingEditor>
			<webMaster>noreply@altocms.ru</webMaster>
			<generator>Alto CMS v.1.5.0b1</generator>
							<item>
					<title>Проксирование псевдовызовов (comment #5545)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/339/#comment5545</guid>
					<link>http://79.174.14.219/339.html#comment5545</link>
					<author>vshemarov@gmail.com</author>
					<description><![CDATA[Любопытное решение. И добавлю еще пару плюсов, которые проистекают от избавления от «магии»:<br/>
<br/>
1) По идее должна увеличиться общая скорость отработки кода, т.к. вызов через «магию» — это все ж довольно ресурсоемкая операция, а таких вызовов в коде немерянно.<br/>
<br/>
2) Появляется возможность передачи параметров по ссылке, чего иногда мне лично не хватало. Например:<br/>
<pre class="prettyprint"><code>class ModuleTopic {
    public function Blabla(&$iCount) {
        $iCount = 1;
        return true;
    }
}
</code></pre>Вот такой вызов ничего не вернет в <strong>$iCount</strong>:<br/>
<pre class="prettyprint"><code>$iCount = 0;
$this-&gt;Topic_Blabla($iCount); // $iCount останется 0</code></pre>А в Вашей реализации, похоже, сработает как надо:<br/>
<pre class="prettyprint"><code>$iCount = 0;
$this-&gt;modules-&gt;topic-&gt;Blabla($iCount); // $iCount вернет 1</code></pre>]]></description>
					<pubDate>Sun, 22 Sep 2013 13:38:07 +0400</pubDate>
									</item>
							<item>
					<title>Проксирование псевдовызовов (comment #5548)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/339/#comment5548</guid>
					<link>http://79.174.14.219/339.html#comment5548</link>
					<author>andreyv@gladcode.ru</author>
					<description><![CDATA[Да, вернет. Каждый элемент цепочки является фактическим объектом, а не фантомом. Этот плюс не увидел.<br/>
<br/>
Хотелось бы указать, что минусы тоже есть, например маппер (и вообще все наследники LsObject) получают возможность обращаться к модулям — ломается архитектура, но это все объигрывается…]]></description>
					<pubDate>Sun, 22 Sep 2013 15:47:09 +0400</pubDate>
									</item>
							<item>
					<title>Проксирование псевдовызовов (comment #5549)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/339/#comment5549</guid>
					<link>http://79.174.14.219/339.html#comment5549</link>
					<author>vshemarov@gmail.com</author>
					<description><![CDATA[Так и сейчас любой наследник LsObject может в своих методах обращаться к модулям:<br/>
<pre class="prettyprint"><code>$this-&gt;Topic_GetTopicsByFilter();</code></pre>Этот вызов в текущей реализации отработает в любом компоненте — сущность, маппер и т.д. Или речь о чем-то другом?<br/>
<br/>
Но дополню: если и внедрять подобную реализацию, то я бы предложил чуть-чуть иной подход, а именно вместо:<br/>
<pre class="prettyprint"><code>$this-&gt;modules-&gt;topic-&gt;getTopicsByFilter($aFilter,$iPage,$iPerPage,array('user','blog'));</code></pre>реализовать что-нибудь типа:<br/>
<pre class="prettyprint"><code>E::$Modules-&gt;topic-&gt;getTopicsByFilter($aFilter,$iPage,$iPerPage,array('user','blog'));</code></pre>Возможно, не так красиво, но есть важное преимущество: мы явно указываем, что не к свойству текущего объекта обращаемся, а именно к модулю. И если даже какой-то новичок программер, не въехав в нюансы, создаст экшен в котором по ему ведомой логике объявит свойство $modules — он напрочь сломает вашу реализацию, а в моем варианте все будет работать.]]></description>
					<pubDate>Sun, 22 Sep 2013 16:21:18 +0400</pubDate>
									</item>
							<item>
					<title>Проксирование псевдовызовов (comment #5552)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/339/#comment5552</guid>
					<link>http://79.174.14.219/339.html#comment5552</link>
					<author>andreyv@gladcode.ru</author>
					<description><![CDATA[В фреймворке Yii используется подобный подход. Там обращение к модулям идет так: <br/>
<pre class="prettyprint"><code>Yii::app()-&gt;module-&gt;doSomething();</code></pre><br/>
Так получается очень естественно и более понятно. Полностью согласен. попробую реализовать так.<br/>
<br/>
Про наследников — это я с LS спутал. Там LsObject не содержит __call метода.]]></description>
					<pubDate>Sun, 22 Sep 2013 17:07:25 +0400</pubDate>
									</item>
							<item>
					<title>Проксирование псевдовызовов (comment #5553)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/339/#comment5553</guid>
					<link>http://79.174.14.219/339.html#comment5553</link>
					<author>vshemarov@gmail.com</author>
					<description><![CDATA[Если спроецировать на наши реалии, то, возможен такой вариант:<br/>
<pre class="prettyprint"><code>E::modules()-&gt;topic-&gt;doSomething();</code></pre>Но надо смотреть, удастся ли сделать так, чтоб подружить с автокомплитом и PHPDoc, ибо это несомненно большой плюс для разработчиков, использующих умные IDE]]></description>
					<pubDate>Sun, 22 Sep 2013 18:07:45 +0400</pubDate>
									</item>
					</channel>
	</rss>
