PHP에도 익명 함수가? 2011-06-21 19:39:35에 작성. 1,605번 읽힘.

지금까지 php에서도 익명함수를 쓸수 있는지 몰랐다. 자바스크립트서 쓰던 익명함수가 php에도 쓸수 있다. 버전은 5.3이상만 쓸 수 있다.

내가 만든 간단한 예제소스는 아래와 같다.

<?
$data = array(
	"code" => md5(rand(0,9999)),
	"name" => "test2"
);
$content = "코드는 [[code]]이고, 이름은 [[name]]이다. [[zz]]는 아직 설정되지 않았다.";
$content = preg_replace_callback("/\[\[(.*?)\]\]/", function($matches) use ($data) {
	return ($data[$matches[1]]?$data[$matches[1]]:"[[{$matches[1]}]]");
}, $content);
echo $content;
?>

익명함수가 생긴이상 또 무한한 활용 가능성이 생겼다. 메모리 관리가 잘 되는지는 모르겠지만, PHP로 콘솔기반 프로그램을 만들 때 프로그램을 종료하지 않더라도 ‘함수를 리로딩’하는 것이 가능하게 되었다는 이야기이다. 이게 include 를 다시 하는 방법밖에 없다는 것, 그리고 그게 결국 메모리 누수를 만든다는게 현실이긴 하지만, 일단은 그런 기능을 Class 에서 Extends 가 아닌 다른 방법으로 구현 가능할 수 있게 됐다는게 아주 놀라운점이다.

도메인과 라이브러리 2011-06-21 14:52:00에 작성. 861번 읽힘.

나는 지금 시점에서 가지고 있는 도메인이 40개가 넘는다.

일부는 무료도메인 서비스 (oa.to) 를 위해서 산것도 있고, 내가 보기에 좋은 도메인이라 가지고 놀려고 산 것도 있고 또 무료도메인 서비스같이 특정 서비스를 하려고, 아니면 홈페이지를 운영하려고 산 도메인도 있다.

무튼 지금은 내가 보기에 좋은 도메인이라고 생각하는거에 대해서 글을 쓸 생각인데, 요즘에 만들고 있는 사이트에서는 이미지나 자바스크립트, CSS등을 모두 한곳에 몰아놓고 쓴다. 뭐 맨날 이것저것 홈페이지 관련된걸 만들다보니 매번 공통적으로 쓰는게 있었다. 정말로 내가 만든 페이지에서는 빠지지 않는 이것!

http://s.zz.gg/common.css

어떤 사이트에서도 공통적으로 적용 할 수 있는 ‘이니셜라이저 CSS’이다. 웹표준 사이트를 만드려고 하기 위해서는 어떤 사이트든 무조건 CSS에 대해서 이니셜라이징을 해둬야 많은 브라우저에서 잘보이기 마련이다. 그 말썽쟁이 IE라는 놈 때문에.. 저기엔 내가 정말로 자주 쓰고 항상 쓰는 속성만 싹 모아놨다. 그게 바로 “라이브러리”이다. 자기가 많이 쓰는 기능들을 한데모아 편하게 쓸 수 있도록 모아두는 걸 라이브러리라고 한다. 어떤 프로그래머든 자신이 자주이용하는 함수를 모아둔 라이브러리를 만들고 싶은 마음이 없는 사람은 거의 없을거다. 그냥 나도 차곡차곡 정리하다보니 아래에 나올 라이브러리들이 모아졌다.

근데 뭔가 특이한게 있지 않은가? 위에 보이는 저 도메인은 ‘라이브러리’전용 도메인이다. 실제로는 내가 zz.gg 라는 도메인의 주인이고, 거기에 이미지 서버등의 서브도메인으로 많이 쓰는 ”static”의 약자인 s를 붙여 s.zz.gg 라고 지었다. ss.gg 뭐 요정도면 더 좋았겠지만 이런건 구하기 힘드니까.. 이게 뭔 의미냐 싶겠지만 저렇게 하면 입력하기 상당히 쉽다. 그런데 어차피 복사 붙여넣기로 css랑 js 붙여넣어 쓰면서 뭘 편하길 바라냐고? 아 그것까지는 대답 못해주겠음! 사실 그것까지는 나도잘.. 그냥 간지나게 짧은 도메인 붙여봤음.

내가 젤 자주 쓰는 공개 ajax 라이브러리가 jquery 이다. 이것도 역시 아래와 같이 주소를 구성하여 쓰고있다.

http://s.zz.gg/jquery/jquery.placeholder.js

다른 것들과 구분의 핵심이 s.zz.gg/ 뒤에 나오는 폴더이름이다. 저 폴더를 중심으로 구분하고 있다. 이런거 하다보면 대충대충 이리저리 껴넣다가 나중에 구조가 파산신청하고 싶어버리게 될때가 상당히 많은데 첨부터 차곡차곡.. 이외에도 phpjs, sound manager2, codemirror, extjs 등을 모두 넣어놨다. 이렇게 쓴지 반년은 된거 같은데 엄청 편하다.

그리고 위에 css 라이브러리 뿐만 아니라 js 라이브러리도 쌓고 있다. 요즘에 js 에 재미가 들어서 전면 ajax 적용된 CMS를 만들고 있다. 코드네임은 infiniteboard.

http://s.zz.gg/infinite/func.js

위는 가장 자주 쓰는 함수 모음의 일부이다.

여러가지가 있다. form 태그에 여러 간단한 attribute 만 추가해주고 아주 쉽게 ajax 처리를 끝내버릴 수 있는, 추가적인 스크립트 따위도 코딩이 필요 없이 그냥 간단한 ajax 폼를 한방에 만들어버릴 수 있는 함수가 있다.

둘째로 빙빙 돌아가는 로딩이미지를 보여주는 함수가 있다.

셋째로 a href 와 비슷한 기능을 하면서 특정 키를 누르고 있을때는 새창이 열리게 하는 등의 기능이 있는 함수가 있다. 대체적으로 button 에다가 a href 거는 것은 비표준이니, onclick로 링크를 걸고 싶을 때 사용한다.

넷째로 실시간 시간을 보여주는 처리를 하는 함수이다. phpjs 의 time() 함수에 의존성이 있고 <span class=’_timestamp’ timestamp=’타임스탬프값’></span> 라고 본문에 적어두면 특정 시간마다 갱신하는 기능을 넣을 수 있다. 그렇게 되면 저 타임스탬프값과 클라이언트의 시간 값을 비교해서 몇초 전에 작성된 글인가? 요런걸 갖다 보여준다. 서버와 클라이언트간의 시간 차가 있을 수 있으니 이것도 처리를 해주는데, 이건 서버마다 다르니까 웹페이지를 만들때 따로 처리를 한다. 저기 보이는 전역 변수 timeDif 가 그 비밀이다.

또 다섯째로 instantForm 이라는 부분이다. 이건 일반적으로 inline 으로 보이는 “텍스트”를 클릭을 하면 갑자기 “input 상자”로 바뀌면서 바로 그 자리에서 수정을 할 수 있도록 하는 기능이다. 아직 만든지 1-2주밖에 되지 않았고 좀더 확실하고 범용적이게 개선이 되려면 아직 몇주 더 걸릴것이다. 참고로 요건 uibutton 이라는 함수에 의존성이 있다. 그냥 꾸밈용 함수인데 이건 나~중에 설명하기로 한다. 페이스북의 버튼 기능에 감동받아서 만든 함수이다.

이 포스트와 비슷한 포스트들