<?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>PHPK.org &#187; PHP</title>
	<atom:link href="http://www.phpk.org/archives/category/articles/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.phpk.org</link>
	<description>PHP User Group</description>
	<lastBuildDate>Tue, 17 Jan 2012 17:17:20 +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>PHP4와 PHP5의 객체 참조</title>
		<link>http://www.phpk.org/archives/458</link>
		<comments>http://www.phpk.org/archives/458#comments</comments>
		<pubDate>Wed, 28 Oct 2009 20:04:29 +0000</pubDate>
		<dc:creator>ooti</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP4]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[객체]]></category>
		<category><![CDATA[성능]]></category>
		<category><![CDATA[참조]]></category>

		<guid isPermaLink="false">http://www.phpkorea.org/archives/458</guid>
		<description><![CDATA[꽤 오래전 이야기라서 많은 분들이 알고 계시리라 생각합니다만 정리도 할 겸 적어 봅니다. 지금은 대부분의 시스템에서 PHP5를 사용하고 있으리라 생각합니다. 하지만 아직도 어디건간 PHP4 코드가 동작하고 있겠죠. PHP4에서 PHP5로 넘어오면서 가장 큰 변화 중 하나는 객체 참조였습니다. PHP4가 개발되고 사용될 당시에는 일반적으로 PHP를 객체 지향적으로 작성하지 않았습니다. 그렇기 때문에 값을 참조로 넘기는 것이 좋은 생각은 [...]]]></description>
			<content:encoded><![CDATA[<p>꽤 오래전 이야기라서 많은 분들이 알고 계시리라 생각합니다만 정리도 할 겸 적어 봅니다.</p>
<p>지금은 대부분의 시스템에서 PHP5를 사용하고 있으리라 생각합니다. 하지만 아직도 어디건간 PHP4 코드가 동작하고 있겠죠. PHP4에서 PHP5로 넘어오면서 가장 큰 변화 중 하나는 객체 참조였습니다. PHP4가 개발되고 사용될 당시에는 일반적으로 PHP를 객체 지향적으로 작성하지 않았습니다. 그렇기 때문에 값을 참조로 넘기는 것이 좋은 생각은 아니었습니다. 물론 &amp; 연산자를 이용해 참조를 지정할 수는 있습니다만 이해하기 어렵고 때때로 올바르지 않은 결과를 초래하기 까지 합니다.</p>
<p>시간이 흘러 객체 지향적인 프로그래밍을 하는 사람이 늘어나면서 PHP5에서는 객체 참조가 반영됐습니다. 이것은 $thing = new Thing; 처럼 객체를 생성하는 경우에는 참조를 반환하는 것입니다.</p>
<pre class="brush: php;">$thing = new Thing;
$thing-&gt;Kind = 'PC';

$thing2 = $thing;
$thing2-&gt;Kind = 'Mac';

echo $thing-&gt;Kind;</pre>
</p>
<p>위 코드를 PHP4와 PHP5에서 각각 실행했을 때 PHP4에서는 “PC”가 출력되고 PHP5에서는 “Mac”이 출력됩니다.</p>
<p>만약 PHP4에서 “Mac”을 출력하고 싶다면 아래와 같이 작성해야 합니다.</p>
<pre class="brush: php;">$thing = new Thing;
$thing-&gt;Kind = 'PC';

$thing2 = &amp;$thing;
$thing2-&gt;Kind = 'Mac';

echo $thing-&gt;Kind;</pre>
</p>
<h3>참조의 이점</h3>
<p>참조를 사용하면 복사하는 것에 비해 메모리 공간 등에서 이점이 있습니다. $memory 라는 변수가 1MB를 자치한다면 참조를 사용하지 않고 $memory_copy 변수에 복사한다면 메모리 사용량은 2MB로 증가하게 됩니다. 아무래도 객체는 다양한 구성 요소를 갖고 있기 때문에 객체 지향을 적극 반영한 PHP5의 객체 참조는 당연한 결과입니다. 객체가 아니더라도 적절히 참조를 사용한다면 시스템 자원을 아낄 수 있을 것입니다.</p>
<h3>참조를 사용하지 않는게 이로운 경우</h3>
<p>참조가 성능상에 좋다고 해서 모든 경우에서 참조를 사용한다면 반대로 성능을 떨어뜨리거나 예상치 못한 오류가 발생할 수도 있습니다. 이를 고려해서 PHP5 에서도 객체 인스턴스가 아닌 값의 대입인 경우에는 복사를 합니다. 복사(값)와 참조의 차이는 간단하게 아래 그림처럼 표현할 수 있을 겁니다. </p>
<p><a href="http://blog.phpkorea.org/files/20091029_040209.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2009-10-29_040209" border="0" alt="2009-10-29_040209" src="http://blog.phpkorea.org/files/20091029_040209_thumb.jpg" width="334" height="275" /></a> </p>
<p>변수 $a 가 “Hello”라는 값을 직접 가지고 있는 반면, 변수 $b 와 같은 참조의 경우엔 값에 대한 메모리 주소 값을 갖고 있기 때문에 “Hello”라는 값을 가져오기까지 $a 에 비해서 상대적으로 속도가 느립니다. 복사를 한다면 메모리 상에서 영역을 확보하고 “Hello”라는 문자열을 추가하는 비용이 들긴 하지만 값을 얻어오는 데 드는 비용이 낮기 때문에 전체적인 속도면에서 이롭다고 할 수 있습니다.</p>
<p>하지만 아주 큰 값을 가진 변수를 복사한다던지 문자열을 반복해서 복사하는 경우라면 자칫 성능을 저하시킬 수도 있기 때문에 주의해야 합니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpk.org/archives/458/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP5.3.0] Namespaces(네임스페이스)</title>
		<link>http://www.phpk.org/archives/321</link>
		<comments>http://www.phpk.org/archives/321#comments</comments>
		<pubDate>Wed, 29 Jul 2009 10:01:09 +0000</pubDate>
		<dc:creator>ooti</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[PHP5.3.0]]></category>
		<category><![CDATA[네임스페이스]]></category>

		<guid isPermaLink="false">http://www.phpkorea.org/archives/321</guid>
		<description><![CDATA[PHP 5.3.0 에서는 아주 반가운 기능이 추가되었습니다. PHP는 버전 5로 올라오면서 본격적으로 OOP를 지원하고 있습니다. 이제는 클래스로 기능을 묶는 것이 일반화되었습니다. 그럼에도 불구하고 PHP에서는 왠지 부족함이 느껴졌습니다. 바로 네임스페이스가 없었습니다. 이 네임스페이스가 드디어 5.3.0 버전에서 추가되었습니다. 네임스페이스가 왜 필요한가 네임스페이스는 코드를 묶는 추상적인 개념으로 클래스를 파일이라고 한다면 네임스페이스는 디렉터리라고 할 수 있습니다. 클래스는 비슷한 기능을 [...]]]></description>
			<content:encoded><![CDATA[<p>PHP 5.3.0 에서는 아주 반가운 기능이 추가되었습니다. PHP는 버전 5로 올라오면서 본격적으로 OOP를 지원하고 있습니다. 이제는 클래스로 기능을 묶는 것이 일반화되었습니다. 그럼에도 불구하고 PHP에서는 왠지 부족함이 느껴졌습니다. 바로 네임스페이스가 없었습니다. 이 네임스페이스가 드디어 5.3.0 버전에서 추가되었습니다.</p>
<h3>네임스페이스가 왜 필요한가</h3>
<p>네임스페이스는 코드를 묶는 추상적인 개념으로 클래스를 파일이라고 한다면 네임스페이스는 디렉터리라고 할 수 있습니다. 클래스는 비슷한 기능을 하는 함수들을 하나로 묶어 놓은 것입니다. 예를 들면 class DB 에는 select(), insert(), delete(), update() 등 함수가 있을 수 있습니다. 네임스페이스는 DB 클래스가 어디에 속했는 지를 나타냅니다. 자바에는 package 라는 네임스페이스가 있습니다.</p>
<p>PHP에서 클래스를 작성하다 보면 클래스 이름이 중복되어 곤란한 경우가 있습니다. PEAR 에는 DB 클래스가 있습니다. 그런데 Zeroboard XE 의 라이브러리에도 DB 클래스가 있습니다. 만약 PEAR 와 Zeroboard XE를 같이 사용한다면 아래 그림처럼 예상치 못한 문제가 발생할 수 있습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-152051.jpg"><img title="2009-07-29_152051" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="225" alt="2009-07-29_152051" src="http://blog.phpkorea.org/files/20090729-152051-thumb.jpg" width="405" border="0" /></a> </p>
<p>네임스페이스를 이용하면 위 그림과 같은 문제를 해결할 수 있습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-163442.jpg"><img title="2009-07-29_163442" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="279" alt="2009-07-29_163442" src="http://blog.phpkorea.org/files/20090729-163442-thumb.jpg" width="410" border="0" /></a></p>
<h3>네임스페이스 사용 방법</h3>
<p>PHP 5.3.0 에서 추가된 네임스페이스를 사용하는 방법은 아래 소스코드처럼 네임스페이스로 붂고 싶은 곳에 namespace 를 추가하면 됩니다.</p>
<p>&#160;</p>
<p><a href="http://blog.phpkorea.org/files/20090729-185303.jpg"><img title="2009-07-29_185303" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="2009-07-29_185303" src="http://blog.phpkorea.org/files/20090729-185303-thumb.jpg" width="515" border="0" /></a></p>
<p>namespace 키워드 뒤에 지정하고자 하는 네임스페이스를 작성하면 됩니다. 네임스페이스의 구분자는 \ 를 사용합니다. ( 자바에서는 .(점)을 사용하죠. ) 그러면 MyClass{ } 와 myFunction( ) 은 myNamespace\mySubNamespace 라는 네임스페이스에 묶이게 됩니다. MyClass 와 myFunction 을 사용하는 방법은 아래 소스코드와 같습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-185506.jpg"><img title="2009-07-29_185506" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="122" alt="2009-07-29_185506" src="http://blog.phpkorea.org/files/20090729-185506-thumb.jpg" width="514" border="0" /></a> </p>
<p>주의할 점은 인스턴스를 생성하거나 함수를 호출할 때에는 네임스페이스 맨 앞에 \ 를 붙여야 합니다. 이것은 디렉터리에서 절대경로 ( cd \etc )와 같다고 보시면 됩니다. 이 절대경로의 개념은 네임스페이스에 속한 클래스나 함수가 아닌 전역 클래스나 함수에 접근하는데 활용됩니다. 아래의 코드는 전역 함수를 호출하는 예제입니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-185606.jpg"><img title="2009-07-29_185606" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="169" alt="2009-07-29_185606" src="http://blog.phpkorea.org/files/20090729-185606-thumb.jpg" width="512" border="0" /></a> </p>
<p>PHP의 문자열 함수인 prinft() 와 동일한 이름으로 함수를 정의합니다. 이미 우리는 myNamespace\mySubNamespace 안에서 코드를 작성하고 있기 때문에 printf()를 호출하면 새로 정의한 printf() 함수가 동작합니다. \myNamespace\mySubNamespace\printf() 를 사용해도 마찬가지로 같은 함수가 호출됩니다. 하지만 \ 는 전역을 의미하므로 \printf() 를 호출하게 되면 원래 PHP 에서 제공하는 전역 함수인 <a title="printf()" href="http://www.php.net/manual/en/function.print.php">printf()</a> 를 실행합니다.</p>
<p>결과 값은 아래와 같습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-185748.jpg"><img title="2009-07-29_185748" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="93" alt="2009-07-29_185748" src="http://blog.phpkorea.org/files/20090729-185748-thumb.jpg" width="512" border="0" /></a> </p>
<h3>주의</h3>
<p>네임스페이스는 주석을 제외한 그 어떤 코드보다도 먼저 정의되어야 합니다. 만약 아래와 같이 namespace 보다 앞서서 다른 코드가 있다면 오류가 발생합니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-185905.jpg"><img title="2009-07-29_185905" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="102" alt="2009-07-29_185905" src="http://blog.phpkorea.org/files/20090729-185905-thumb.jpg" width="510" border="0" /></a> </p>
<h3>다중 네임스페이스</h3>
<p>PHP 의 네임스페이스는 하나의 파일에서 여러 개의 네임스페이스를 허용합니다. 코드를 보시면 바로 이해될 것 같습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-185957.jpg"><img title="2009-07-29_185957" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="229" alt="2009-07-29_185957" src="http://blog.phpkorea.org/files/20090729-185957-thumb.jpg" width="514" border="0" /></a> </p>
<p>실행 결과는 아래와 같습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-190040.jpg"><img title="2009-07-29_190040" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="36" alt="2009-07-29_190040" src="http://blog.phpkorea.org/files/20090729-190040-thumb.jpg" width="509" border="0" /></a> </p>
<p>한 파일에 네임스페이스가 두개 이상 있을 수 있습니다. 단, 순차적으로 적용되기 때문에 마지막 줄에서 printf()를 실행했을 땐 SecondaryNamespace 의 prinft() 가 실행됩니다. 실행 결과에서 SecondaryNamespace 의 prinft() 를 통해서 mySubNamespace 의 prinft() 가 실행됐다는 것을 알 수 있습니다. 네임스페이스가 정의된 위치에 따라서 다르게 묶이기 때문에 다중 네임스페이스를 활용할 땐 조심해야 할 것 같습니다. 의도하지 않은 버그가 생길 수 있을테니까요.</p>
<p>아무래도 하나의 파일엔 하나의 네임스페이스만 사용하는 게 가장 좋을 것 같습니다.</p>
<h3>네이스페이스 활용</h3>
<p>네임스페이스는 파일과는 상관없이 지정할 수 있습니다. MyCalss1.php 과 MyClass2.php 파일이 같은 네임스페이스를 가질 수 있습니다. 이렇게 구성하게 되면 아래 그림과 같이 여러 파일에 나뉘어진 클래스를 하나로 묶을 수 있습니다. 그러면 동일한 myNamespace 네임스페이스 안에서 MyClass1 과 MyClass2 를 사용할 수 있게 됩니다. 단, 같은 네임스페이스 안에서는 파일이 나뉘어져 있더라도 클래스나 함수 등이 중복될 수 없습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090729-184100.jpg"><img title="2009-07-29_184100" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="220" alt="2009-07-29_184100" src="http://blog.phpkorea.org/files/20090729-184100-thumb.jpg" width="476" border="0" /></a> </p>
<h3>마치며</h3>
<p>프로그램이 커질 수록 복잡도가 증가하게 되는데 네임스페이스를 활용하면 소스 코드를 구조화 할 수 있습니다. 물리적으로 디렉터리를 구분해서 PHP 파일을 나누는 것과는 다르게 PHP 프로그램 내에서 클래스와 함수 그리고 변수를 구조적으로 작성할 수 있기 때문에 보다 발전된 코드를 작성할 수 있을 것이라 기대합니다.</p>
<ul>
<li>예제 소스 코드 : <a href="http://pastebin.kr/yETM">http://pastebin.kr/yETM</a> </li>
<li>참고 : <a href="http://kr.php.net/manual/en/language.namespaces.php">http://kr.php.net/manual/en/language.namespaces.php</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.phpk.org/archives/321/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cannot find &#8211;lltdl 에러 해결 방법</title>
		<link>http://www.phpk.org/archives/305</link>
		<comments>http://www.phpk.org/archives/305#comments</comments>
		<pubDate>Mon, 20 Jul 2009 11:42:12 +0000</pubDate>
		<dc:creator>ooti</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[libtool]]></category>

		<guid isPermaLink="false">http://www.phpkorea.org/archives/305</guid>
		<description><![CDATA[PHP를 컴파일 하는 과정에서 cannot find –lltdl 에러 메세지가 출력되고 컴파일이 중단되는 경우가 있습니다. /usr/bin/ld: cannot find -lltdl *** Error code 1 PHP을 컴파일하기 위해서는 autoconf, automake, libtool, GNC make, GCC, GNU elf-binutils package 가 필요합니다. 이 에러 메세지는 이 중에서 libtool 을 찾지 못했다는 것이므로 libtool 을 설치하면 됩니다. libtool은 http://www.gnu.org/software/libtool/ 에 접속하셔서 화면 [...]]]></description>
			<content:encoded><![CDATA[<p>PHP를 컴파일 하는 과정에서 cannot find –lltdl 에러 메세지가 출력되고 컴파일이 중단되는 경우가 있습니다.
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 500px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">/usr/bin/ld: cannot find -lltdl
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">*** Error code 1</pre>
</pre>
<p>PHP을 컴파일하기 위해서는 autoconf, automake, libtool, GNC make, GCC, GNU elf-binutils package 가 필요합니다. 이 에러 메세지는 이 중에서 libtool 을 찾지 못했다는 것이므로 libtool 을 설치하면 됩니다.</p>
<p>libtool은 <a title="http://www.gnu.org/software/libtool/" href="http://www.gnu.org/software/libtool/">http://www.gnu.org/software/libtool/</a> 에 접속하셔서 화면 중앙에 The latest stable version 의 링크를 클릭해서 내려 받을 수 있습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090720-195733.jpg"><img title="2009-07-20_195733" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="333" alt="2009-07-20_195733" src="http://blog.phpkorea.org/files/20090720-195733-thumb.jpg" width="371" border="0" /></a> </p>
<p>웹 서버에서 압축을 풀고 ./configure 을 수행합니다. 그리고 make 와 make install 을 하시고 php 를 다시 컴파일을 시도해 보시면 됩니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpk.org/archives/305/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP5.3.0] Late Static Bindings</title>
		<link>http://www.phpk.org/archives/301</link>
		<comments>http://www.phpk.org/archives/301#comments</comments>
		<pubDate>Wed, 15 Jul 2009 09:02:45 +0000</pubDate>
		<dc:creator>ooti</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[LateStaticBinding]]></category>
		<category><![CDATA[PHP5.3.0]]></category>
		<category><![CDATA[정적메소드]]></category>
		<category><![CDATA[정적함수]]></category>

		<guid isPermaLink="false">http://www.phpkorea.org/archives/301</guid>
		<description><![CDATA[같은 클래스 안에 속한 정적 함수를 호출 할 때에는 $this 변수를 사용하지 않고 self 키워드를 사용합니다. 이&#160; self 키워드의 특징은 self 를 실행하는 자기 클래스가 아니라 호출하려는 메소드가 정의된 클래스를 의미합니다. 1: &#60;?php 2: class ParentClass { 3: public static function who() { 4: echo 'I am Parent Class.'; 5: } 6: 7: public static [...]]]></description>
			<content:encoded><![CDATA[<p>같은 클래스 안에 속한 정적 함수를 호출 할 때에는 $this 변수를 사용하지 않고 self 키워드를 사용합니다. 이&#160; self 키워드의 특징은 self 를 실행하는 자기 클래스가 아니라 호출하려는 메소드가 정의된 클래스를 의미합니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 500px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2: <a style="color: #0000ff" href="http://www.php.net/class">class</a> ParentClass {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> who() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> '<span style="color: #8b0000">I am Parent Class.</span>';
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  5:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  6:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  7:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> whoAreYou() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  8:     self::who();
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  9:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 10: }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 11:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 12: <a style="color: #0000ff" href="http://www.php.net/class">class</a> ChildClass <a style="color: #0000ff" href="http://www.php.net/extends">extends</a> ParentClass {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 13:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> who() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 14:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> '<span style="color: #8b0000"> I am Child Class.</span>';
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 15:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 16: }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 17:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 18: ChildClass::whoAreYou();
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 19:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 20: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
<p>위 코드와 같이 ChildClass 가 ParentClass 를 상속 받았습니다. ChildClass 에 있는 whoAreYour() 함수를 호출하여 who() 함수를 실행했을 때 어떤 문자열이 출력될까요.</p>
<p>결과는 I am Parent Class. 입니다.</p>
<p>정적 함수의 상속 관계를 그림으로 보면 아래와 같습니다.</p>
<p><a href="http://blog.phpkorea.org/files/20090715-135134.jpg"><img title="2009-07-15_135134" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="476" alt="2009-07-15_135134" src="http://blog.phpkorea.org/files/20090715-135134-thumb.jpg" width="404" border="0" /></a> </p>
<h3>Last Static Bindings</h3>
<p>PHP 5.3.0 에서 추가된 Late Static Bindings는 static 키워드를 추가하여 정의된 부모 클래스가 아니라 상속을 받은 자기 자신을 지징할 수 있도록 했습니다. 코드를 보면 아래와 같습니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 500px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2: <a style="color: #0000ff" href="http://www.php.net/class">class</a> ParentClass {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> who() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> '<span style="color: #8b0000">I am Parent Class.</span>';
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  5:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  6:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  7:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> whoAreYou() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  8:     static::who();
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  9:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 10: }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 11:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 12: <a style="color: #0000ff" href="http://www.php.net/class">class</a> ChildClass <a style="color: #0000ff" href="http://www.php.net/extends">extends</a> ParentClass {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 13:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> who() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 14:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> '<span style="color: #8b0000"> I am Child Class.</span>';
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 15:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 16: }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 17:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 18: ChildClass::whoAreYou();
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 19:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 20: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
<p>바뀐 부분을 눈치 채셨나요? ParentClass 의 whoAreYou() 함수 안에서 self::who() 코드가&#160; static::who() 로 바뀌었습니다. 이렇게 static 키워드를 사용하면 상속 받은 자식 클래스에서 자신의 함수를 사용할 수 있습니다. 이 static 키워드를 사용하면 아래 코드처럼 작성할 수도 있습니다.</p>
<p>아래 코드에서는 ParentClass 에 who() 함수가 없습니다. 그럼에도 불구하고 ParentClass 에서 who() 를 호출하고 있습니다. 이런 경우 ChildClass 의 who() 가 호출 될 것이므로 ParentClass 에 who() 함수가 정의되어 있지 않아도 됩니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 500px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2: <a style="color: #0000ff" href="http://www.php.net/class">class</a> ParentClass {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> whoAreYou() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  5:     static::who();
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  6:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  7: }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  8:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  9: <a style="color: #0000ff" href="http://www.php.net/class">class</a> ChildClass <a style="color: #0000ff" href="http://www.php.net/extends">extends</a> ParentClass {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 10:   public static <a style="color: #0000ff" href="http://www.php.net/function">function</a> who() {
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 11:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> '<span style="color: #8b0000"> I am Child Class.</span>';
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 12:   }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 13: }
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 14:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 15: ChildClass::whoAreYou();
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 16:
</pre>
<pre style="font-size: 11px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb"> 17: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.phpk.org/archives/301/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP에서 BIGINT 표현하는 방법</title>
		<link>http://www.phpk.org/archives/270</link>
		<comments>http://www.phpk.org/archives/270#comments</comments>
		<pubDate>Thu, 18 Jun 2009 06:10:36 +0000</pubDate>
		<dc:creator>ooti</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[BIGINT]]></category>
		<category><![CDATA[Float]]></category>
		<category><![CDATA[sprintf]]></category>

		<guid isPermaLink="false">http://www.phpkorea.org/archives/270</guid>
		<description><![CDATA[MySQL 에는 BIGINT 형이 있습니다. BIGINT 의 값의 범위는 총 64비트로 Signed 인 경우 -9223372036854775808 에서 9223372036854775807 까지 이고, Unsiged 인 경우 0부터 18446744073709551615 까지 입니다. 반면 PHP의 INT 형은 값의 범위는 총 32비트로 –2147483647 부터 +2147483647 까지이며 Unsigned 인 경우 0부터 4294967295 까지 입니다. PHP 는 값이 INT 범위를 넘어서는 경우 변수를 Float 형으로 [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL 에는 BIGINT 형이 있습니다. BIGINT 의 값의 범위는 총 64비트로 Signed 인 경우    <br />-9223372036854775808 에서 9223372036854775807 까지 이고,     <br />Unsiged 인 경우 0부터 18446744073709551615 까지 입니다.</p>
<p>반면 PHP의 INT 형은 값의 범위는 총 32비트로 –2147483647 부터 +2147483647 까지이며 Unsigned 인 경우 0부터 4294967295 까지 입니다.</p>
<p>PHP 는 값이 INT 범위를 넘어서는 경우 변수를 Float 형으로 변경합니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 650px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2:     $i = 2147483647 ;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:     <a style="color: #ffa500" href="http://www.php.net/var_dump">var_dump</a>($i);
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4:
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  5:     $i = 2147483647 + 1 ;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  6:     <a style="color: #ffa500" href="http://www.php.net/var_dump">var_dump</a>($i);
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  7: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
<p>결과</p>
<p><code>int(2147483647)<br />
  <br />float(2147483648)</code> </p>
<p>float 은 사실상 double 형이라고 볼 수 있기 때문에 BIGINT 와 같은 64비트의 값을 가질 수 있습니다.</p>
<p>문제는 일정 값 이상이 되면 아래와 같이 지수표현 법으로 출력됩니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 650px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2:     $i = 5820061110073302;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $i;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
<p>출력</p>
<p><code>5.8200611100733E+15</code> </p>
<p>간단하게 생각하면 INT 범위를 넘어가는 $i 를 문자열로 바꾸면 제대로 출력될 수도 있을 것 같습니다. 그러나 아쉽게도 그렇지 않습니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 650px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2:     $i = 5820061110073302;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:     $str = &quot;<span style="color: #8b0000">$i</span>&quot;;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4:     <a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $str;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  5: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
<p>마찬가지로 출력은 5.8200611100733E+15 입니다.</p>
<p>Float 형으로 저장된 BIGINT 값을 자수표현 법이 아닌 정수표현으로 출력하고 싶다면 아래와 같이 할 수 있습니다.</p>
<pre style="border-right: #cecece 1px solid; padding-right: 5px; border-top: #cecece 1px solid; padding-left: 5px; min-height: 40px; padding-bottom: 5px; overflow: auto; border-left: #cecece 1px solid; width: 650px; padding-top: 5px; border-bottom: #cecece 1px solid; background-color: #fbfbfb">
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  1: <span style="color: #0000ff">&lt;?</span>php
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  2:     $i = 5820061110073302;
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  3:     $str = <a style="color: #ffa500" href="http://www.php.net/sprintf">sprintf</a>(&quot;<span style="color: #8b0000">%.0f</span>&quot;,$i);
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  4:     <a style="color: #ffa500" href="http://www.php.net/var_dump">var_dump</a>($str);
</pre>
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; background-color: #fbfbfb">  5: <span style="color: #0000ff">?&gt;</span></pre>
</pre>
<p>출력 결과</p>
<p><code>string(16) &quot;5820061110073302&quot;</code> </p>
<p>앞서 `간단히` 생각해 봤던 방법처럼 sprintf 이용해서 Float 형의 값을 String 을 변경하였고 우리가 원했던 값의 형태로 출력할 수 있게 되었습니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpk.org/archives/270/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.phpk.org/archives/category/articles/php/feed ) in 0.20126 seconds, on Feb 8th, 2012 at 8:36 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 8th, 2012 at 9:36 am UTC -->
