php5 autoload 활용하기

PHP/팁앱테크 2012. 4. 3. 13:39

PHP5 autoload 함수 활용하기


PHP5 부터는 __autoload 라는 특별한 함수를 지원한다.

기존의 클래스 파일을 사용하기 위해서는

include '/classes/db/DbMysqli.class.php';
$db =  new DbMysqli();

이와 같이 include 먼저 하고나서
클래스를 선언하여 사용해야 했다.
엄청 불편하다

자바처럼 그냥 new 로 생성해서 사용하면 편한데 말이다. ^^

그래서 나온것이 바로 요놈 __autoload 이다


이놈을 사용하게 되면
그냥 include 를 수동으로 코딩하지 않아도
__autoload 이놈이 알아서 include 해준다.
그러므로 이제부터는 그냥

$db = new  DbMysqli();

이렇게만 선언해서 사용하면 된다.

아래 소스는 __autoload 를 정의 해 놓은 것이다
소스는 이렇다

@ __autoload Source

# 절대 경로
define('_ROOT_PATH_', '/www/설치경로');

# 클래스 자동 인클루드
function __autoload($class_name)
{
        # 클래스명중 경로 추출
	$tmp_args = explode(' ', preg_replace( '/([a-z0-9])([A-Z])/', "$1 $2",$class_name));
	$class_path_name = sprintf("%s/{$class_name}",strtolower($tmp_args[0]));
	
	# 체크
         if(!class_exists($class_path_name,false))
	{
		# classes 폴더
		if(file_exists(_ROOT_PATH_.'/classes/'.$class_path_name.'.class.php') !==false){
			include_once _ROOT_PATH_.'/classes/'.$class_path_name.'.class.php';
		}

		# modules 폴더
		else if(file_exists(_ROOT_PATH_.'/modules/'.$class_path_name.'.class.php') !==false){
			include_once _ROOT_PATH_.'/modules/'.$class_path_name.'.class.php';
		}

		# 기타 만든 클래스 폴더 [첫대문자만 폴더로 지원]
		# ( /my/MyTest.class.php -> MyTest.class.php)
		else if(file_exists(_ROOT_PATH_.'/'.$class_path_name.'.class.php') !==false){
			include_once _ROOT_PATH_.'/'.$class_path_name.'.class.php';
		}
	}
}


자 이젠 __autoload 함수 정의 해 놓은 것을 설명할 차례군요

먼저, 아래와 같은 폴더 구조에 클래스 파일들이 있다고 가정을 합니다.

|----------------------------------------------------------------
|       파일경로 및 클래스 파일명         |         클래스명               
|-----------------------------------+----------------------------
/classes/db/DbMysqli.class.php         // class DbMysqli{ }
/classes/req/ReqForms.class.php       // class  ReqForms { } 
/classes/tpl/TplFusion.class.php         // class  TplFusion {}

/modules/bbs/BbsModel.class.php        // class BbsModel{ }
/modules/mem/MemModel.class.php      // class MemModel{ }

/my/MyTest.class.php                           // class MyTest{ }


1. __autoload($class_name) 는 new 라는 명령만 떨어지면 자동으로 호출이 됩니다.

$db = new DbMysqli();


new -> __autoload 를 호출하고
$class_name -> DbMysqli 클래스 명이 되는거죠

2. 클래스명에서 클래스가 위치 하고 있는 경로를 추출합니다. 기준은 첫번째 대문자로 시작하고
다음 대문자가 나오기 전까지의 클래스명의 문자는 폴더를 가리킵니다.

DbMysqli    이건 폴더 db 를 가리키고
ReqForms   이건 폴더 req 를 가리키고
BbsModel   이건 폴더 bbs 를 가리키고
MemModel  이건 폴더 Mem 를 가리키고
MyTest       이건 폴더 my 를 가리킵니다.

위와 같은 기준으로 위치 (폴더) 를 알아냅니다.

# 클래스명중 경로 추출
$tmp_args = explode(' ', preg_replace( '/([a-z0-9])([A-Z])/', "$1 $2",$class_name));
$class_path_name = sprintf("%s/{$class_name}",strtolower($tmp_args[0]));


2. 이미지 인클루드된 클래스 파일이 있는지 확인 한 후 있으면 include 안하고
없으면 하게 될겁니다.

제가 코딩 해 놓은건
일단 무조건 

1. classes 폴더 밑에 클래스 이름 폴더를 찾고 없으면
2. modules 폴더 밑에 클래스 이름 폴더를 찾고 그리고 나서
3. 선언된 클래스의 이름 폴더를 찾도록 하였습니다.

전 이유가 있어서 그랬지만  1,2번을 삭제하고 바로 3번만 선언해서 사용하셔도 됩니다.

그 역할을 하는 소스 부분이 바로 이 부분

# 체크
 if(!class_exists($class_path_name,false))
{
		# 1. classes 폴더
		if(file_exists(_ROOT_PATH_.'/classes/'.$class_path_name.'.class.php') !==false){
			include_once _ROOT_PATH_.'/classes/'.$class_path_name.'.class.php';
		}

		# 2. modules 폴더
		else if(file_exists(_ROOT_PATH_.'/modules/'.$class_path_name.'.class.php') !==false){
			include_once _ROOT_PATH_.'/modules/'.$class_path_name.'.class.php';
		}

		# 3. 기타 만든 클래스 폴더 [첫대문자만 폴더로 지원]
		# ( /my/MyTest.class.php -> MyTest.class.php)
		else if(file_exists(_ROOT_PATH_.'/'.$class_path_name.'.class.php') !==false){
			include_once _ROOT_PATH_.'/'.$class_path_name.'.class.php';
		}
}


끝까지 읽어 주셔서 감사합니다.
이 방법 말고도 php.net 에 보시면 클래스도 지원합니다.

마음에 드는 방법으로 사용하세요


ChromeMarks 개발자와 인터넷 서핑을 많이 하는 사용자 필수 어플3

추천 어플/안드로이드 2012. 4. 3. 12:19

ChromeMarks 구글 크롬 브라우저 북마크를 폰에서 바로 보자 3


이번엔 구글 크롬 시리즈 3번째로
구글 크롬 브라우저에 북마크 시켜놓은 것을
스마트폰에서 보기입니다.

저 같은 경우엔 구글 크롬 브라우저를 메인으로 활용하고 있어서
즐겨찾기 해 놓았거든요

이러한 북마크를 폰에서도 쉽게 볼 수 있었음 하고 찾다가
ChromeMarks 를 찾았습니다.
기뻣습니다. ㅎㅎㅎ

브라우저에 즐겨찾기 해 놓고 컴퓨터에서든
내 스마트폰에서든 보기를 원할때 사용하시면 너무 편합니다.
적극 주천하니

개발자와 인터넷 서핑을 많이 하는 사용자 필수 어플 1, 2, 3 를 다 활용해 보시기 바랍니다.

자 떠납시다 슈~~ㅇ 슈~~ㅇ



1. 안드로이드 마켓에 들어 가서   ChromeMarks 이라고 검색합니다.
위 아이콘과 깉은 화면이 나오면 설치 하기를 눌러서 

내 안드로이드 폰에 설치를 합니다.






2. 구글 크롬 브라우저에 등록된 저의 북마크 즉 즐겨찾기 입니다.
저 화면들이 ChromeMarks 를 통해 볼 수 있습니다.






3. 구글 크롬 브라우저에 등록된 저의 북마크들이 ChromeMarks 를 통해 출력이 되는 화면입니다.
좋죠? ^^

마지막 동영상이 있으니 함 보시기 바랍니다.



ChromeMarks 개발자와 인터넷 서핑을 많이 하는 사용자 필수 어플3

Phone 2 Google Chrome :: 개발자와 인터넷 서핑을 많이 하는 사용자 필수 어플2

Chrome to Phone :: 개발자와 인터넷 서핑을 많이 하는 사용자 필수 어플1


jquery를 활용한 select 메뉴 컨트롤 메니저

js API/jquery 2012. 3. 29. 17:51

jquery 를 이용해 SELECT 메뉴를 손쉽게 컨트롤 해보자


좋은 소스를 만들어 주신 분께 먼저 감사합니다.
참 좋은 소스 인데요.

익스7, 8, 9, 오페라, 파이어폭스, 크롬, 사파리 에서 테스트 해 보았습니다.

다 잘 되더군요 역시 익스6은 안되는듯 ...
익스6은 버렸음 좋겠다 얼릉 사라졌음 하는 바램뿐

일단 jQuery 를 기반으로 만들어 졌기 때문에
jquery를 포함하고 있어야 합니다.

말보다 소스를 보시고
소스를 긁어다 테스트 해 보심이 더 빠를겁니다.


@ 자바 스크립트 /==========================================================

< script src="http://code.jquery.com/jquery.min.js" type="text/javascript">

< script type="text/javascript" >
var receiverMan = {
	itemList: null, // select option
	baseOption: {
		itemListSelector : 'select#itemList'
	},
	
	init: function(pOption) {
		this.baseOption = $.extend(this.baseOption, pOption);
		this.itemList = $(this.baseOption.itemListSelector);
	},
	selectedOptions: function() {
	    return this.itemList.find("option:selected");	
	}
	,
	add: function(data) {
		this.itemList.append($("").attr("value", data.value).text(data.text));
	}
	,
    del: function() {
    	// del selected all
    	this.selectedOptions().remove();
    }
	,
    clear: function() {
        // del all items
        this.itemList.find("option").remove();
    }
	,
    up: function() {        
    	var selectedOptions = this.selectedOptions();
    	var prev = $(selectedOptions).first().prev();
    	$(selectedOptions).insertBefore(prev);
    }
	,
    dn: function() {
    	var selectedOptions = this.selectedOptions();
        var next = $(selectedOptions).last().next();
        $(selectedOptions).insertAfter(next);
    }
	,
	selectedOne: function() {
		// return selected first item
		return { 
			value: this.selectedOptions().first().attr("value"),
			text:  this.selectedOptions().first().text()
			}
	}
	,
	selectedAll: function() {
        // return all selected item
		var r  = [];
		this.selectedOptions().each(function(idx, data) {
            r.push({
                value: $(this).attr("value"),
                text: $(this).text()
            });
        });
        return r;
    }
	,
   all: function() {
    	// return all
    	var r  = [];
	this.itemList.find("option").each(function(idx, data) {
    		r.push({
    			value: $(this).attr("value"),
                text: $(this).text()
    		});
    	});
    	return r;
    }
}



$(document).ready(function() {
	$('#receiverAdd').click(function() {
        receiverMan.add({text: 'test:'+(new Date().getTime()), value: '0001'  })
    });
    $('#receiverDel').click(function() {
        receiverMan.del();                
    });
    $('#receiverClear').click(function() {
        receiverMan.clear();                
    });
    $('#receiverUp').click(function() {
    	receiverMan.up();
    });
    $('#receiverDown').click(function() {
    	receiverMan.dn();
    });
    
	receiverMan.init({
		// itemListSelector : "your SELECT selector"
		itemListSelector : "select#itemList"
	});

	$('#itemList').change(function(){
		var args= receiverMan.selectedOne();
		alert(args['value']+' '+args['text']);
	});

	// 자동 등록 레이어 테스트 
	for(var i=0; i<7; i++){
		receiverMan.add({text: 'test:'+(new Date().getTime()), value: '000'+i  })
	}
});
< /script >


@ css /===============================================
< style text="text/css" >
.receiverInputBox {
    width: 500px;
}
.itemList {
    width:300px;
    height:20px;
    font-size:100%;
    color:blue;
    background-color:#ffffff;
    border:0px solid #ffffff;
}
< /style >





@ html /===============================================
< div>
    < div>
        < select name="itemList" id="itemList" class="itemList">
        < a href="#" id="receiverAdd">Add/
        < a href="#" id="receiverDel">Delete/
        < a href="#" id="receiverClear">Clear/
        < a href="#" id="receiverUp">Up/
        < a href="#" id="receiverDown">Down
    < /div>
< /div>


php array 값중 가장 큰 값을 추출(max)하고 그 값이 가리키고 있는 키값(array_search)을 추출한다

PHP/팁앱테크 2012. 3. 29. 11:43

php array 값중 가장 큰 값을 추출(max)하고 그 값이 가리키고 있는 키값(array_search)을 추출한다


PHP의 매력 ㅎㅎㅎ
뭐 말하려니 입이 아프네요 ㅎㅎㅎ

오늘은 배열 값 중에서 가장 큰 값을 찾는 것과
그 값이 가리키는 키값을 찾는 걸 해볼까 합니다.

알면 유용하니 잘 보아 두세요.


@ 다음과 같은 배열이 있습니다.

$tmp_v_args = 

// 결과
Array
(
    [0] => 0
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 0
    [11] => 0
    [12] => 0
    [13] => 0
    [14] => 0
    [15] => 0
    [16] => 0
    [17] => 0
    [18] => 0
    [19] => 58
    [20] => 33
    [21] => 58
    [22] => 57
    [23] => 9
    [24] => 16
    [25] => 102
    [26] => 115
    [27] => 138
    [28] => 22
    [29] => 0
    [30] => 0
)



@ 배열중 가장 큰 값을 추출 하겠습니다.

$max_int_v = max($tmp_v_args); #배열중 가장 큰 값 추출

// 결과
138



@ 추출한 값이 가리키는 배열의 키를 추출하겠습니다.

$max_int_v_key = array_search($max_int_v, $tmp_v_args); #값이 가리키는 키값 추출

// 결과
27



@ 위 코드를 한번에 작성하면 다음과 같이 되겠죠

$max_int_v = max($tmp_v_args); #배열중 가장 큰 값 추출
$max_int_v_key = array_search($max_int_v, $tmp_v_args); #값이 가리키는 키값 추출



끝까지 읽어 주셔서 감사합니다.

php array 함수의 마력 array_splice, array_values 활용

PHP/팁앱테크 2012. 3. 29. 11:10

php array 함수의 마력 array_splice, array_values 활용


PHP는 가볍고 속도가 빠른것으로 유명하다
실제 프로그래밍을 해봐도 그렇다 
확장성 또한 띄어나다

그중의 하나인 array 함수 들 중
array_splice 자르기, array_values 값만 추출하여 숫자로 인덱싱 해주는
이 놀라운 함수로 원하는 데이타를 추출해 보겠다


@ 먼저 다음과 같은 배열값이 있다고 하자


# 변수명 
$args = 
Array
(
    [uid] => 1
    [regi_ym] => 201203
    [ads_url_info_uid] => 1
    [totals] => 602
    [d1] => 0
    [d2] => 0
    [d3] => 0
    [d4] => 0
    [d5] => 0
    [d6] => 0
    [d7] => 0
    [d8] => 0
    [d9] => 0
    [d10] => 0
    [d11] => 0
    [d12] => 0
    [d13] => 0
    [d14] => 0
    [d15] => 0
    [d16] => 0
    [d17] => 0
    [d18] => 0
    [d19] => 0
    [d20] => 58
    [d21] => 33
    [d22] => 58
    [d23] => 57
    [d24] => 9
    [d25] => 16
    [d26] => 102
    [d27] => 115
    [d28] => 138
    [d29] => 16
    [d30] => 0
    [d31] => 0
)


@ array_splice 로 d1 ~ d31 까지만 값이 필요하므로 그 부분만 따로 다른 변수에 담도록 하겠다


$row_splice = array_splice($args,4);
print_r($row_splice);

// 결과
Array
(
    [d1] => 0
    [d2] => 0
    [d3] => 0
    [d4] => 0
    [d5] => 0
    [d6] => 0
    [d7] => 0
    [d8] => 0
    [d9] => 0
    [d10] => 0
    [d11] => 0
    [d12] => 0
    [d13] => 0
    [d14] => 0
    [d15] => 0
    [d16] => 0
    [d17] => 0
    [d18] => 0
    [d19] => 0
    [d20] => 58
    [d21] => 33
    [d22] => 58
    [d23] => 57
    [d24] => 9
    [d25] => 16
    [d26] => 102
    [d27] => 115
    [d28] => 138
    [d29] => 16
    [d30] => 0
    [d31] => 0
)

내가 원하는 값만 추출 했다.

d1 위치가 4번째 배열위치에 있었으므로 4번째 배열부터 끝배열까지 자르라는 의미였다.



@ 이젠 array_values 를 통해 d1,d2 키를 없애고 [0]=>1, [1]=>2 숫자 인덱스 값을 갖는 배열로 바꿔보겠다.


$row_values = array_values($row_splice);
print_r($row_values);

// 결과
Array
(
    [0] => 0
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 0
    [11] => 0
    [12] => 0
    [13] => 0
    [14] => 0
    [15] => 0
    [16] => 0
    [17] => 0
    [18] => 0
    [19] => 58
    [20] => 33
    [21] => 58
    [22] => 57
    [23] => 9
    [24] => 16
    [25] => 102
    [26] => 115
    [27] => 138
    [28] => 22
    [29] => 0
    [30] => 0
)


올 내가 딱 원하는 형태로 데이타 형태가 바뀌었다

이 놀라운 PHP의 세계를 경험해 보라


위 단계를 다음과 한줄로 코딩해도 됩니다.

그래도 같은 결과가 나옵니다.

print_r( array_values(array_splice($row,4)) );



끝까지 읽어 주셔서 감사합니다.


PHP Array 배열 함수 페이지