프리미엄 WP 테마 플러그인 무료 다운로드

Reply To: bbpress로 만든 게시판입니다

질문 제출 Forums Reply To: bbpress로 만든 게시판입니다


Word Cracker
Keymaster

클래스(class)에서 지시자(->)의 의미
http://jobdahan.net/language_php/17384

본 내용은 http://cafe.naver.com/phpcafe.cafe 카페에 제가 질문 올려 놓고 답변 받은 내용을 학습차원에서 올려 놓은 것입니다.
답변주신 지용이님 이곳을 빌어 다시 한번 감솨요..^^
—————————————————————————————————————-

하늘님은 우선 객체지향이 무엇인지를 공부하셔야 할 것 같습니다.
서점에서 객체지향과 관련된 책을 구입해 보시기 바랍니다.

지금 이해를 못 하는 부분이 바로 함수와 객체의 차이입니다.

객체는 자신만의 변수와 함수 가질 수 있습니다. 객체에서 변수, 함수는 각각 멤버변수 , 메쏘드 라고 불립니다.

class test {
var $a; // 멤버변수 (클래스 안에서 변수를 정의 할때는 var를 반드시 적어 주어야 한다.)
var $b;

function aaa() { // 메쏘드 (클래스안의 함수를 메쏘드 라고 한다.)
$this->abcd = ” 알파벳”; // 메쏘드안에서 변수 정의할 때는 $this를 붙혀 준다.
}
}

위와 같이 test 란 class 가 있고 이 class 를 사용하기 위해선 아래와 같이 객체를 생성합니다.

$obj = new test;

이제 $obj 에 새로운 객체하나가 생성되었고 이 객체는 $a, $b 라는 멤버변수와 aaa() 라는 메쏘드 하나를 포함하고 있습니다.

만약 멤버변수나 메쏘드를 사용하고 싶다면 아래와 같이 하시면 됩니다.

echo $obj->a; // 멤버변수 $a 값을 출력
$tmp = $obj->aaa(); // 메쏘드 aaa() 를 실행시키고 그 값을 $tmp 에 저장

-> 를 글로 해석할 때는 ‘무엇 안에 있는’ 이라고 표현하면 해석이 편하리라 생각됩니다.
즉 $obj 안에 있는 $a 를 출력 , $obj 안에 있는 aaa() 실행

자 그럼 ‘->’ 이것이 무엇을 하는 것인지 어느정도 감이 오시리라 생각됩니다.

이제 아래 예제를 보세요.

class test {
var $a;
var $b;

function aaa() {
echo $this->a;
}
}

위와 같이 aaa() 메쏘드에서 자신이 속한 객체의 멤버변수 또는 메쏘드에 접근 또는 실행 시킬때는 this 키워드를 사용하게 됩니다. 이 this 는 단어 그대로 현재 객체를 뜻 하는 것입니다. 즉 외부 다른 객체의 변수, 메쏘드와 자신의 변수,메쏘드를 구분하는 것이라 생각하셔도 되죠…^^

자 그럼 질문 하신 내용에 있는 구문을 한번 봅시다.

$this->cut_str_size = $data->info->cut_str_size;

우선 앞에 있는 것 부터 보면…

“현재 객체 안에 있는 cut_str_size 멤버변수에” 라고 해석할 수 있겠습니다.
그럼 이 멤버변수에 무엇을 저장하느냐?

“$data 객에 안에 있는 info 객체 안에 있는 cut_str_size 멤버변수의 값” 을 저장해라.

* 참고로 -> 를 사용하면 그 앞에 있는 것은 무조건 객체가 됩니다.
그리고 info 가 왜 객체 인지는 $data 가 생성되는 부분을 보시면 확인하실 수 있을텐데요.
DB 쿼리 후 fetch() 라는 메쏘드를 이용하고 있습니다. 그런데 이 fetch() 라는 메쏘드에서는
mysql_fetch_object() 이란 php 함수를 사용하고 있습니다. 그리고 이 함수는 리턴값으로 객체를 반환합니다.

즉 $tmp = mysql_fetch_object($result); 이렇게 하게되면 $tmp 값에는 객체가 저장이 되고
값을 사용하고 싶다면 $tmp->필드명 식으로 접근 하게됩니다.

이제 $data->info->cut_str_size 를 이해하실 수 있을꺼라 생각되네요…^^

$cond_list = “module_srl = ‘{$module_srl}'”;

위 라인은 그냥 $cond_list 에 module_srl = ‘$module_srl변수값’ 문자열을 저장하는 것 뿐입니다.
$module_srl 변수값이 test 라면 module_srl = ‘test’ 이렇게 저장되죠.

$oDB->select(‘*’,’articles’,$cond_list,$order,0,$rows);

위 라인은 $oDB 객에 안에 있는 select() 이란 메쏘드를 호출하고 있으며 select() 메쏘드가 실행될때 필요로 하는 인자들을 전달 하고 있는 라인입니다. 이 라인의 결과를 예측해 보시려면 select() 메쏘드를 확인해 보세요.

$tmp->url = zUrl::getViewUrl($tmp->article_srl);

마지막 이 라인은 $tmp 객체 안에 있는 url 멤버변수에…
zUrl 객체의 getViewUrl() 메쏘드의 실행 결과를 저장하라는 것입니다.

:: 는 new 라는 지시자로 class를 미리 객체화 시켜놓지 않고 사용하는 시점에서 객체가 생성되고 지정된 메쏘드가 실행되도록 하는 접근자 입니다.

그럼 소스분석에 도움이 되었길 바라며 더 진행하시기 전에 객체지향 프로그램에 대해 먼저 공부해 보시길 권합니다…^^