<?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>Athlan • Piotr Pelczar • blog programisty &#187; Framework</title>
	<atom:link href="http://athlan.pl/kategoria/framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://athlan.pl</link>
	<description>Napisać kod zrozumiały dla komputera potrafi byle głupek. Dobrzy programiści tworzą kod zrozumiały dla człowieka...</description>
	<lastBuildDate>Tue, 14 Feb 2012 14:33:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Autoload &#8211; praktyczne mapowanie</title>
		<link>http://athlan.pl/autoload/</link>
		<comments>http://athlan.pl/autoload/#comments</comments>
		<pubDate>Sat, 31 Mar 2007 20:21:58 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Solutions]]></category>

		<guid isPermaLink="false">http://athlan.vgroup.pl/autoload/</guid>
		<description><![CDATA[O autoloadzie klas było już głośno, rozpatrywaliśmy wszelkie za i przeciw w wielu miejscach choćby tu, tu i tu. Mechanizm automatycznego ładowania potrzebnych nam klas jest bardzo dobrym sposobem na zrelaksowanie się poprzez brak przymusu ręcznego ładowania plików potrzebnych do działania aplikacji. Znajdźmy receptę na owe pytanie przedstawiając dwa najpopularniejsze sposoby trzymania klas w np. [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0cm">O <a href="http://php.net/autoload">autoloadzie</a> klas było już głośno, rozpatrywaliśmy wszelkie za i przeciw w wielu miejscach choćby <a href="http://forum.php.pl/index.php?showtopic=40450">tu</a>, <a href="http://strzalek.net/blog/8/autoload-automatyczne-ladowanie-klas">tu</a> i <a href="http://forum.php.pl/index.php?showtopic=26107">tu</a>.</p>
<p style="margin-bottom: 0cm">Mechanizm automatycznego ładowania potrzebnych nam <a href="http://php.net/class">klas</a> jest bardzo dobrym sposobem na zrelaksowanie się poprzez brak przymusu ręcznego <a href="http://php.net/include">ładowania plików</a> potrzebnych do działania aplikacji. Znajdźmy receptę na owe pytanie przedstawiając dwa najpopularniejsze sposoby trzymania klas w np. <a href="http://pl.wikipedia.org/wiki/Framework">frameworkach</a>.</p>
<ul>
<li>
<p style="margin-bottom: 0cm"><a href="http://framework.zend.com/">Zend Framework</a> i <a href="http://rapide.pl">Rapide</a> mają dość sztywną, lecz nie wymagającą specjalnego kombinowania technikę umieszczania plików w core. Sposób nazewnictwa jest bardzo prosty: <em>Folder_Subfolder_Klasa</em> – owy  zapis odnosi się do 	<em>./Folder/Subfolder/Klasa.Class.php</em>.</p>
</li>
<li>
<p style="margin-bottom: 0cm">W <a href="http://framework.vgroup.pl">moim frameworku Vframe</a> 	zastosowałem technikę, w której pliki leżą sobie „wolność w core, nazewnictwo klas nie tyczy się ich ścieżki, np. <em>NazwaKlasy</em> może odnieść się do <em>./NazwaKlasy.Class.php</em> lub <em>./Folder/Subfolder/ NazwaKlasy.Class.php</em>.</p>
</li>
</ul>
<p style="margin-bottom: 0cm">Spróbuję opisać drugi – mój – sposób na ładowanie plików z core aplikacji. Potrzebna nam będzie klasa, która jest w stanie przeskanować całe core i zapisać je do tablicy. Aby było łatwiej, skan zostanie zaserializowany do pliku jako mapa folderu. Co jeżeli plik nie będzie istniał w core? Wówczas mapa zostanie stworzona od nowa, jeżeli to nie pomoże &#8211; wyrzucimy wyjątek.</p>
<p style="margin-bottom: 0cm">Projektujemy naszą klasę, nazwiemy ją przykładowo Autoload, metody:</p>
<ul>
<li>
<p style="margin-bottom: 0cm"><em><strong>Load</strong>($sLibrary, $bRemapped = false)</em> – metoda która będzie odpowiedzialna za załadowanie 	pliku oraz (jeżeli nie będzie istniała) stworzenie tablicy plików. W wypadku braku pliku zostanie ponownione wywołanie metody tworzenia mapy plików z przymusowym przeskanowaniem folderu klas oraz tym samym odpalenie metody samej siebie z przyjęciem drugiego jej parametru na true – brak ponownego skanowania folderu i wyrzut wyjątku.</p>
</li>
<li>
<p style="margin-bottom: 0cm"><em><strong>Map</strong>($bUseTemp = true) </em>– metoda 	odpowiedzialna za stworzenie tablicy z plikami na podstawie pliku mapy poprzez odserializowanie danych w nim zapisanych. Jeżeli parametr otrzyma wartość false lub plik mapy nie będzie możliwy do odczytu, wówczas tworzona zostanie mapa, zapisana do pliku 	mapy oraz do tablicy klasy.</p>
</li>
<li>
<p style="margin-bottom: 0cm"><em><strong>FormatName</strong>($sLibrary) </em>– metoda 	formatująca nazwę klasy: Klasa.Class.php</p>
</li>
</ul>
<p style="margin-bottom: 0cm">Wykorzystamy trzy stałe:</p>
<ul>
<li>
<p style="margin-bottom: 0cm"><em>const _<strong>LibDir</strong></em><strong> </strong>– określa ścieżkę folderu z klasami</p>
</li>
<li>
<p style="margin-bottom: 0cm"><em>const _<strong>LibSurfix</strong></em><strong> </strong>– surfixy plików (.Class.php)</p>
</li>
<li>
<p style="margin-bottom: 0cm"><em>const _<strong>LibMap</strong></em><strong> </strong>– ścieżka i nazwa pliku mapy</p>
</li>
</ul>
<p style="margin-bottom: 0cm">Potrzebna będzie nam jeden statyczny, prywatny parametr klasy, który jest sam w sobie jej singletonem, więc każda instancja klasy będzie z niego korzystała:</p>
<p style="margin-bottom: 0cm"><em>private static $_aCoreMap = array();</em></p>
<p>Ok, teraz wystarczy użyć funkcji <em>__autoload() </em>i wykorzystać naszą klasę:</p>
<p>[php]function __autoload($sLibrary)<br />
{<br />
try<br />
{<br />
Autoload::Load($sLibrary);<br />
}<br />
catch(AutoloadException $oException)<br />
{<br />
// some message to display<br />
die(&#8216;Autoload failed: &#8216; . $oException-&gt;getMessage());<br />
}<br />
}[/php]</p>
<p>Tworzymy osobisty wyjątek dla autoloadera:</p>
<p>[php]class AutoloadException extends Exception<br />
{</p>
<p>}[/php]</p>
<p>oraz samą klasę:</p>
<p>[php] class Autoload<br />
{<br />
const _LibDir = &#8216;Core/&#8217;;<br />
const _LibSurfix = &#8216;.Class.php&#8217;;<br />
const _LibMap = &#8216;Map.tmp&#8217;;</p>
<p>private static $_aCoreMap = array();</p>
<p>public static function Load($sLibrary, $bRemapped = false)<br />
{<br />
if(!count(self::$_aCoreMap))<br />
self::Map();</p>
<p>$sLibraryFile = self::FormatName($sLibrary);</p>
<p>if(!isset(self::$_aCoreMap[$sLibraryFile]))<br />
{<br />
if($bRemapped)<br />
// if we remapped core and library dosen&#8217;t exists &#8211; throw an exception<br />
throw new AutoloadException(&#8216;Library &#8220;&#8216; . $sLibrary . &#8216;&#8221; has not been found in directory map!&#8217;);<br />
else<br />
{<br />
// ok, let&#8217;s go map core again without using map from file<br />
self::Map(false);<br />
// try load class from core directory again&#8230;<br />
self::Load($sLibrary, true);<br />
}<br />
}</p>
<p>require_once(self::$_aCoreMap[$sLibraryFile]);<br />
}</p>
<p>public static function Map($bUseTemp = true)<br />
{<br />
// if map is ok and we counld use it, get the map from file&#8230;<br />
if($bUseTemp &amp;&amp; is_readable(self::_LibMap))<br />
self::$_aCoreMap = unserialize(file_get_contents(self::_LibMap));<br />
// &#8230;unless we have to scan core and make map<br />
else<br />
{<br />
// clear array and remamp directory<br />
self::$_aCoreMap = array();</p>
<p>foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(self::_LibDir)) as $oFile)<br />
{<br />
$sFile = $oFile-&gt;getFilename();</p>
<p>if(isset(self::$_aCoreMap[$sFile]))<br />
throw new AutoloadException(&#8216;Core duplication &#8220;&#8216;.$sFile.&#8217;&#8221; found!&#8217;);<br />
else<br />
self::$_aCoreMap[$sFile] = $oFile-&gt;getPathname();<br />
}</p>
<p>// ok, save map to file<br />
if(!file_put_contents(self::_LibMap, serialize(self::$_aCoreMap)))<br />
throw new VframeException(&#8216;Cannot create core map!&#8217;);<br />
}<br />
}</p>
<p>private static function FormatName($sLibrary)<br />
{<br />
return $sLibrary . self::_LibSurfix;<br />
}<br />
}<br />
?&gt;[/php]</p>
<p><img src="http://www.speedyshare.com/gf/pic2.gif" align="left" height="60" width="40" />Całą paczkę klasy i zastosowań możecie <a href="http://www1.speedyshare.com/data/682616883/2918261/10302420/Autoload.rar">pobrać tutaj</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/autoload/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Kanały informacyjne</title>
		<link>http://athlan.pl/kanaly-informacyjne/</link>
		<comments>http://athlan.pl/kanaly-informacyjne/#comments</comments>
		<pubDate>Mon, 25 Dec 2006 16:31:10 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://athlan.vgroup.pl/kanaly-informacyjne/</guid>
		<description><![CDATA[Dyzo rozmyślam o kanałach informacyjnych. Świetna sprawa, jeżeli wiem, że na mojej ulubionej stronie pojawiła sie nowa notka lub wpis, mogę zostawić sobie go do przeczytania na później wiedząc o tym, że jest. Mowię tutaj o kanałach RSS, XML i Atom. Specjalnie z tej okazji założyłem sobie na bloga OperaWidget. Teraz mój kanał RSS importowany [...]]]></description>
			<content:encoded><![CDATA[<div align="left">Dyzo rozmyślam o kanałach informacyjnych. Świetna sprawa, jeżeli wiem, że na mojej ulubionej stronie pojawiła sie nowa notka lub wpis, mogę zostawić sobie go do przeczytania na później wiedząc o tym, że jest. Mowię tutaj o kanałach RSS, XML i Atom. Specjalnie z tej okazji założyłem sobie na bloga OperaWidget. Teraz mój kanał RSS importowany jest do widżetu. Uruchomienie jest napradę proste. Teraz w pasku adresu macie nowy, niebieski przycisk, po jego uaktywnieniu na <a href="http://opera.com">Operze</a> możecie korzystać z widżeta mojego RSS.</div>
<div style="text-align: center"><img src="http://img244.imageshack.us/img244/1743/wideths6.png" /></div>
<p>Odnośnie samych kanałów RSS, w wigilijną noc zacząłem kodzić, gdyż będą stanowić część mojego frameworka. Stworzyłem trzy klasy, odpowiedzalne kolejno za kanały: RSS, Atom i XML. Powstała nowa notka na forum php.pl:</p>
<p><a href="http://forum.php.pl/klasy-php5-Generator-kanalow-informacyjnych-Feeds-t59071.html">http://forum.php.pl/klasy-php5-Generator-kanalow-informacyjnych-Feeds-t59071.html</a></p>
<blockquote><p>Może dział nie jest trafny co do mojego celu zamieszczenia tych klas, ale po części chodzi mi o ocenę. Ostatnio dużo myślałem nad obsługą kanałów informacyjnych w moim fameworku (ang. Feeds). Sprawa wygląda bardzo kontrowersyjnie, bowiem RSS nie cieszy się już taką dobrą opinią, jednak większość użytkowników używa właśnie tej wersji kanałów informacyjnych. Według ekspertów jego miejsce ma zastąpić kanał Atom, który stał się trendem i już rok temu liczba jego użytkowników znacznie wzrosła. Pomyślałem również o udostępnianiu naszych informacji w formie czystego arkusza XML.</p>
<p><a href="http://www.speedyshare.com/883624873.html">Vfeed 0.1 &#8211; download</a></p>
<p>Powstały kolejne klasy:</p>
<p>Feed.Class.php – klasa abstrakcyjna, a zarazem rodzic wszystkich innych klas kanałów informacyjnych.<br />
FeedRSS.Class.php – kanał informacyjny w formie RSS<br />
FeedAtom.Class.php – kanał informacyjny w formie Atom<br />
FeedXML.Class.php – czysty arkusz Tagów XML, nie przedstawiany jako kanał, ale jako dostępne źródło informacji, zaliczyłem go jako kanał, gdyż można z niego pobierać informacje poprzez różne dostępne metody takie jak SimpleXML, czy SAX.</p>
<p>W paczce został załączony jeszcze interfejs oraz przykładowe pliki użycia klas. Dokumentacji niestety nie ma, bowiem jest to jeden z komponentów mojego frameworka, szczegółowa dokumentacja wraz z przykładami pojawi się przy wydaniu stabilnej wersji Feeds. Proszę o ocenę, ale nie na tym mi zależy. Jakbyście mogli protestować wszystkie możliwości klasy, zadawać mi jak najwięcej pytań, aby wykryć tyle błędów, ile się tylko da.</p>
<p>Klasy zostały napisane w niecałą godzinę, dlatego wszystko jest możliwe. W razie wystąpienia jakichkolwiek błędów, będę zamieszczał kolejne wersje z poprawkami.</p></blockquote>
<p>Już mogę powiedzieć, że opublikowana wersja klasy dla kanału Atom nie jest finalna, bowiem zapoznałem się dziś ze <a href="http://kurs.browsehappy.pl/Atom/Atom">szczegółową budową kanału Atom</a>. Brakuje mi parametrów dla tagów wewnątrz klauzuli < entry > takiego jak na przykład < link > dla pliku video.</p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/kanaly-informacyjne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zasysanie plików w Vframe</title>
		<link>http://athlan.pl/zasysanie-plikow-w-vframe/</link>
		<comments>http://athlan.pl/zasysanie-plikow-w-vframe/#comments</comments>
		<pubDate>Sat, 23 Dec 2006 11:51:46 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://athlan.vgroup.pl/zasysanie-plikow-w-vframe/</guid>
		<description><![CDATA[Ostatnio dużo myślałem nad tym, co jeszcze można dodać do mojego frameworka, bo jest bardzo duży, a do publikacji (03.01.2007) już niedługo. Przez moją myśl przeszło ściąganie plików… no tak. Teraz gdzie to ująć :) . Mam klasę odpowiedzialną za przechwycenie uploadowanych plików, zbieranie informacji o nich, kopiowanie. Może tam? Owszem. Kwestia ściągnięcia plików jest [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio dużo myślałem nad tym, co jeszcze można dodać do mojego frameworka, bo jest bardzo duży,<a href="http://framework.vgroup.pl"> a do publikacji (03.01.2007) już niedługo</a>. Przez moją myśl przeszło ściąganie plików… no tak. Teraz gdzie to ująć :) . Mam klasę odpowiedzialną za przechwycenie uploadowanych plików, zbieranie informacji o nich, kopiowanie. Może tam? Owszem.</p>
<p>Kwestia ściągnięcia plików jest bardzo prosta: do przeglądarki wysyłamy odpowiednie nagłówki oraz wczytujemy treść, która zostanie pobrana. Możemy podjąć dowolną nazwę pliku, chociaż oryginalny ma nazwę stałą. Zacząłem szukać źródeł, w których zastosowane jest pobieranie plików.</p>
<p>Szczególnie pomocnym skryptem okazał się <a href="http://pliki.jarzebski.pl/entry-8692c793c2de81a89b56fa7b244ecfbb.htm" target="_blank">FileSupply</a> mojego kolegi <a href="http://jarzebski.pl/">Korneliusza Jarzębskiego</a> (bardziej znany pod nickiem Bastion, autor słynnych klas takich jak <a href="http://pliki.jarzebski.pl/entry-127ae1f83233c02842e37de40460c4e2.htm">Babel</a>, <a href="http://pliki.jarzebski.pl/entry-24da1c12875725f743080f42ef8b0160.htm">Chameleon</a>, <a href="http://pliki.jarzebski.pl/entry-3a1b624acef44e7a626b665698e72f96.htm">ScoutGeo</a>, <a href="http://pliki.jarzebski.pl/entry-5b723b6a31f5a57db8e0424feb9fd905.htm">FileMagic</a>). Dlaczego ten skrypt? Przykładem jest funkcja ekspozycji pliku, na samej górze jest link, za pomocą którego bez problemu możemy pobrać plik. Zacząłem szperać w kodzie :)</p>
<p>Po zapoznaniu się ze sposobem pobierania (nagłówki umiałem wysłać już wcześniej), który opierał się na pobraniu zawartości plików „w kawałkach‿ postanowiłem zastosować to w nowej metodzie mojej klasy. Co oznacza tzw. Pobieranie „w kawałkach‿? Często serwer mówi , że odczytywana treść wielkiego pliku przekroczyła dozwolony limit bajtów, haczykiem podsuniętym mi przez Bastion’a jest to, że pobieramy go w partiach: 64 * 1024 bajtów (64 kilo), po czym przerywamy odczyt i pętla działa dalej, od momentu w którym przerwaliśmy. Zapobiegnie to wyświetleniu błędów o dużym pliku :).</p>
<p>Ok, czas na kod całej klasy, dodana została metoda download, która jest statyczna, można ją wykorzystywać bez uprzedniego wywoływania instancji klasy. W pierwszym parametrze podajemy ścieżkę do pliku, a w drugim (nieobowiązkowo) nazwa pliku, pod którą ma być on pobrany. Gdy drugi argument pozostanie pusty, nazwa pliku który zostanie wysłany jako nagłówek do ściągnięcia pozostanie taka sama jak oryginalny plik. Przed wywołaniem metody wysłania pliku, nie mogą zostać przesłane żadne nagłówki, po metodzie nie mogą być wykonywane żadne działania przez skrypt php.</p>
<p>Pełny kod obsługi plików w moim frameworku (omawiana została metoda Vfile::download() ): <a href="http://phpfi.com/187275" target="_blank" title="http://phpfi.com/187275">http://phpfi.com/187275</a></p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/zasysanie-plikow-w-vframe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>__autoload() klas we frameworku</title>
		<link>http://athlan.pl/__autoload-klas-we-frameworku/</link>
		<comments>http://athlan.pl/__autoload-klas-we-frameworku/#comments</comments>
		<pubDate>Sun, 19 Nov 2006 17:37:11 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Framework]]></category>

		<guid isPermaLink="false">http://athlan.vgroup.pl/__autoload-klas-we-frameworku/</guid>
		<description><![CDATA[Pisz?c frameworka pewnie wielu z nas zastanawia?o si? jak b?d? ?adowane klasy gdy nie b?dziemy ich wymaga? funckcj? require(). Programi?ci Zend&#8217;a w swoim dziele nie dali nam tak zacnej możliwio?ci&#8230; wszystko ?adujemy r?cznie, przynajmniej tak zauwazy?em ze wst?pnych ogl?dzin kodu i przyk?ad?w zastosowania. Z pomoc? przychodzi nam funkcja __autoload(). Funkcja ta wy?apuje wszystkie pr?by dokonania [...]]]></description>
			<content:encoded><![CDATA[<p>Pisz?c frameworka pewnie wielu z nas zastanawia?o si? jak b?d? ?adowane klasy gdy nie b?dziemy ich wymaga? funckcj? require(). Programi?ci Zend&#8217;a w swoim dziele nie dali nam tak zacnej możliwio?ci&#8230; wszystko ?adujemy r?cznie, przynajmniej tak zauwazy?em ze wst?pnych ogl?dzin kodu i przyk?ad?w zastosowania. Z pomoc? przychodzi nam funkcja __autoload(). Funkcja ta wy?apuje wszystkie pr?by dokonania instacji klas, interfejs?w poprzez deklaracj? s?owem kluczowym ???new??? b?d? z poziomu statycznego.</p>
<p>Przyk?adowym kodem może by?:</p>
<p>[php]function __autoload($sClassName)<br />
{<br />
echo &#8216;Loading class: &#8216; . $sClassName . &#8216;&#8230; &#8216;;<br />
}[/php]</p>
<p>W?wczas wy?apiemy wszystkie pr?by za?adowania jakiejkolwiek klasy i interfejs?w z kt?rych korzystaj? oarz klas ???rodzic?w???. Naprawd? super sprawa. Najprostszym sposobem ?adowania klas jest umieszczanie ich w danym folderze i nazywanie plik?w tak samo, jak klasy w nich zawarte, np klasa Router b?dzie w pliku Router.Class.php w folderze /Classes/ :</p>
<p>[php]function __autoload($sClassName)<br />
{<br />
require_once(&#8216;./Classes/&#8217; . $sClassName . &#8216;.Class.php&#8217;);<br />
}[/php]</p>
<p>W powyższym przyk?adzie pliki klas sa ?adowane bezpo?rednio przed stworzeniem ich instancji. Ale co jak we w?asnym frameworku pliki klas nie s? pok?adane? Przyk?adowo: w folderze klas s? posegregowane w inne foldery. Jak w?wczas framework ma ???zgadn????? o jak? ?cieżk? nam chodzi. Z pomoca przychodzi nam mapowanie folderu, czyli przegl?d plik?w. Tablica jest tworzona w konstruktorze klasy g??wnej frameworka o wzorze &#8216;Plik.Class.php&#8217; => &#8216;./Sciezka/Plik.Class.php&#8217;. Funkcja __autoload() sformatuje sobie nazw? pliku, po czym poszuka jego ?cieżki podaj?c klucz tablicy&#8230; ???szprytne??? co nie?</p>
<p>Teraz kilka wycink?w z mojego frameworka:</p>
<p>[php]function __construct($bAutoExecute = FALSE, $bAutoCheck = FALSE)<br />
{<br />
// &#8230;<br />
self::setCoreMap(V_FRAMEWORK, TRUE);<br />
// &#8230;<br />
}<br />
[/php]</p>
<p>[php]	       public static function getCoreMap($sElement)<br />
{<br />
$sElement = self::_formatLibName($sElement);<br />
$sElementPatch = self::$_aFiles[$sElement];<br />
if($sElementPatch &#038;&#038; self::isUsable($sElementPatch, TRUE))<br />
require_once($sElementPatch);<br />
}<br />
[/php]</p>
<p>[php]       	private static function setCoreMap($sDirectory, $bClearArray = FALSE, $iDeph = 0)<br />
{<br />
if(!is_bool($bClearArray))<br />
throw new VframeException(&#8216;Second param $bClearArray must be boolean!&#8217;);</p>
<p>if($bClearArray === TRUE)<br />
{<br />
self::$_aFiles = array();<br />
}<br />
if(is_dir($sDirectory))<br />
{<br />
$oDirHandle = @opendir($sDirectory);<br />
if($oDirHandle)<br />
{<br />
while($sFile = @readdir($oDirHandle))<br />
{<br />
if($sFile != &#8216;.&#8217; &#038;&#038; $sFile != &#8216;..&#8217;)<br />
{<br />
$sPatch = $sDirectory . $sFile;<br />
if(!is_dir($sPatch))<br />
{<br />
if(isset(self::$_aFiles[$sFile]))<br />
throw new VframeException(&#8216;Core duplication file &#8220;&#8216;.$sFile.&#8217;&#8221; found!&#8217;);<br />
else<br />
self::$_aFiles[$sFile] = $sPatch;<br />
}<br />
else<br />
{<br />
self::setCoreMap($sPatch . DIRECTORY_SEPARATOR, FALSE, $iDeph + 1);<br />
}<br />
}<br />
}<br />
closedir($oDirHandle);<br />
}<br />
else<br />
{<br />
throw new VframeException(&#8216;I can not open directory: &#8216;.$sDirectory.&#8217;!');<br />
}<br />
}<br />
else<br />
{<br />
throw new VframeException(&#8216;Directory &#8216;.$sDirectory.&#8217; does not exists!&#8217;);<br />
}<br />
}<br />
[/php]</p>
<p>Notk? opublikowa?em r?wnież na <a href="http://uczenzklasa.gazeta.pl/athlanster" target="_blank" title="http://uczenzklasa.gazeta.pl/athlanster">blogu konkursowym</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/__autoload-klas-we-frameworku/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
