<?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>Sky.Log(); &#187; PHP</title>
	<atom:link href="http://blog.skyknight.info/category/programowanie/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.skyknight.info</link>
	<description></description>
	<lastBuildDate>Mon, 01 Mar 2010 20:47:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BlipTags</title>
		<link>http://blog.skyknight.info/2009/03/bliptags/</link>
		<comments>http://blog.skyknight.info/2009/03/bliptags/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 20:57:52 +0000</pubDate>
		<dc:creator>SkyKnight</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[php mysql blip]]></category>

		<guid isPermaLink="false">http://blog.skyknight.info/?p=139</guid>
		<description><![CDATA[Cóż, Blip mi się jakoś spodobał ;-) Niestety, brakowało mi jednej funkcjonalności &#8211; jakiegoś centralnego miejsca ułatwiającego poruszanie się po tagach. Fakt, jest BlipCast, ale nie miał on chmury tagów ;-) Stąd też mając chwilę czasu w kilka godzin (choć na przestrzeni tygodnia) powstał skrypt umożliwiający przeglądanie tagów. Pokazuje on chmurki tagów, ich powiązania między [...]]]></description>
			<content:encoded><![CDATA[<p>Cóż, <a href="http://www.blip.pl">Blip</a> mi się jakoś spodobał ;-) Niestety, brakowało mi jednej funkcjonalności &#8211; jakiegoś centralnego miejsca ułatwiającego poruszanie się po tagach. Fakt, jest <a href="http://blipcast.pl/">BlipCast</a>, ale nie miał on chmury tagów ;-) Stąd też mając chwilę czasu w kilka godzin (choć na przestrzeni tygodnia) powstał skrypt umożliwiający przeglądanie tagów. Pokazuje on chmurki tagów, ich powiązania między sobą, otagowane zdjęcia oraz użytkowników-top-tagerów. </p>
<p><a href="http://skyknight.eu/bliptags">BlipTags</a></p>
<p>Jak na razie mój BlipBot bada wiadomości z przed kilku tygodni, dlatego też nowe statusy zostaną przejrzane później.</p>
<h3>Ale to brzydkie!</h3>
<p>Tak, wiem o tym doskonale. Są to niestety strzępy layoutu zrobionego kiedyś przez <a href="http://gecik.info">Geta</a> dla &#8216;portaluktóryjużistniećniebędzie&#8217; ;-) Designer ze mnie żaden, tak więc jeśli znalazłaby się jakaś dobra dusza, która poświęci swój jakże cenny czas i zaprojektuje jakiś prosty layout to będę bardzo wdzięczny :-)</p>
<h3>Błędy? Pomysły?</h3>
<p>Skrypt jest pełen błędów, niedoróbek i uproszczeń. Jeśli taką zauważyłeś lub coś Cię drażni albo masz jakiś inny pomysł &#8211; napisz w komentarzu, bądź na GG/<a href="http://skyknight.blip.pl">Blip</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyknight.info/2009/03/bliptags/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Własny widget dla Wordpressa</title>
		<link>http://blog.skyknight.info/2009/01/wlasny-widget-dla-wordpressa/</link>
		<comments>http://blog.skyknight.info/2009/01/wlasny-widget-dla-wordpressa/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 21:10:19 +0000</pubDate>
		<dc:creator>SkyKnight</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php wordpress widget plugin]]></category>

		<guid isPermaLink="false">http://blog.skyknight.info/?p=93</guid>
		<description><![CDATA[Wordpressowy sidebar bardzo mi się podoba &#8211; nie muszę grzebać w kodzie, by coś poprzesuwać, zmieniać. Jednak zanim napiszesz własny prosty widget, pamiętaj, jest jeden mały &#8220;myk&#8221; ;-) W dokumentacji Widget API napisano, że aby zarejestrować nowy widget należy wywołać (np. w pluginie) register_sidebar_widget(). Szkoda tylko, że ktoś nie wspomniał o tym, że w najnowszych [...]]]></description>
			<content:encoded><![CDATA[<p>Wordpressowy sidebar bardzo mi się podoba &#8211; nie muszę grzebać w kodzie, by coś poprzesuwać, zmieniać. Jednak zanim napiszesz własny prosty widget, pamiętaj, jest jeden mały &#8220;myk&#8221; ;-) W dokumentacji Widget API <a href="http://codex.wordpress.org/Plugins/WordPress_Widgets_Api">napisano</a>, że aby zarejestrować nowy widget należy wywołać (np. w pluginie) <a href="http://codex.wordpress.org/WordPress_Widgets_Api/register_sidebar_widget">register_sidebar_widget()</a>. Szkoda tylko, że ktoś nie wspomniał o tym, że w najnowszych wersjach WP (bodajże od 2.5.x) ta funkcja dołączana jest przez core Wordpressa później niż plugin w związku z tym otrzymujemy piękny komunikat:</p>
<p><code>Call to undefined function: register_sidebar_widget</code></p>
<p>&#8220;Szybkie&#8221; rozwiązanie zostało przedstawione <a href="http://www.linickx.com/archives/401/call-to-undefined-function-register_sidebar_widget">w tym poście</a>, chociaż wydaję mi się trochę błędne, stąd też sadzę, że ten kod jest lepszy:</p>
<p> function widget_becool ($args) {<br />
	echo $args['before_widget'];<br />
	echo $args['before_title'];<br />
	echo &#8216;Becool!&#8217;;<br />
	echo $args['after_title'];<br />
	// sth<br />
	echo $args['after_widget'];<br />
}</p>
<p>function widget_init_becool() {<br />
	register_sidebar_widget( &#8216;Becool&#8217;, &#8216;widget_becool&#8217; );<br />
}<br />
add_action(&#8216;widgets_init&#8217;, &#8216;widget_init_becool&#8217;);</p>
<p>Można użyć <a href="http://pl2.php.net/manual/en/function.create-function.php">create_function()</a>, ale myślę, że tak jest czytelniej :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyknight.info/2009/01/wlasny-widget-dla-wordpressa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Statyczny konstruktor w PHP</title>
		<link>http://blog.skyknight.info/2008/09/statyczny-konstruktor-w-php/</link>
		<comments>http://blog.skyknight.info/2008/09/statyczny-konstruktor-w-php/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 16:43:28 +0000</pubDate>
		<dc:creator>SkyKnight</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.skyknight.info/?p=39</guid>
		<description><![CDATA[W C# istnieje możliwość utworzenia statycznego konstruktora, który jest uruchamiany przy pierwszym odwołaniu do danej klasy. Wygląda to mniej więcej tak:
    public class Foo
    {
        static Foo()
        {
        [...]]]></description>
			<content:encoded><![CDATA[<p>W C# istnieje możliwość utworzenia <a href="http://msdn.microsoft.com/en-us/library/k9x6w0hc(VS.80).aspx">statycznego konstruktora</a>, który jest uruchamiany przy pierwszym odwołaniu do danej klasy. Wygląda to mniej więcej tak:</p>
<p>    public class Foo<br />
    {<br />
        static Foo()<br />
        {<br />
            System.Diagnostics.Trace.Write(&#8220;Klasa Foo zostala zaladowana&#8221;);<br />
        }<br />
    }</p>
<p>Zdarza się, że podobna funkcjonalność przydałaby się w PHP, który jednak tej konstrukcji nie obsługuje. Można to jednak w prosty sposób &#8220;zasymulować&#8221; poprzez odpowiednie zmodyfikowanie &#8220;magicznej&#8221; funkcji <a href="http://pl2.php.net/autoload">__autoload()</a> oraz dodanie statycznej metody do klasy, która będzie udawać konstruktora (w moim przykładzie użyłem nazwy <em>staticConstruct</em>).</p>
<p>class Foo<br />
{<br />
	public function __construct()<br />
	{<br />
		// &#8216;normalny&#8217; konstruktor<br />
	}</p>
<p>	public static function staticConstruct()<br />
	{<br />
		echo &#8216;Klasa Foo zostala zaladowana&#8217;;<br />
	}<br />
}</p>
<p>function __autoload($className)<br />
{<br />
	// obsluga zaladowania klasy<br />
	// &#8230;<br />
	// &#8230;</p>
<p>	if(is_callable(array($className, &#8217;staticConstruct&#8217;)))<br />
	{<br />
		call_user_func(array($className, &#8217;staticConstruct&#8217;));<br />
	}<br />
}</p>
<p>Jak widać sposób implementacji jest wręcz trywialny. Niemniej pojawia się dwie kwestii, które trzeba wyjaśnić:</p>
<ul>
<li>statyczny konstruktor jest publiczny przez co można wywoływać go w kodzie &#8211; można ten problem rozwiązać poprzez wprowadzenie odpowiedniego statycznego pola typu boolean, które będzie sprawdzane przez owy konstruktor &#8211; nie jest to do końca &#8220;eleganckie&#8221; rozwiązanie, niemniej innego sposobu nie dostrzegłem</li>
<li>statyczny konstruktor w klasie dziedziczącej <strong>nie musi</strong> (i nie jest to nawet wskazane) wcale wywoływać konstruktora z klasy nadrzędnej, bowiem zostanie on samodzielnie wywołany przez __autoload() w czasie ładowania klasy</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyknight.info/2008/09/statyczny-konstruktor-w-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
