[ php ] Class 사용법 정리 2. 객체생성
페이지 정보
작성자 웹지기 댓글 0건 조회 9,026회 작성일 18-09-11 14:30본문
2.객체생성
객체생성=객체초기화(object initialization)=인스턴스화(instantiation)
클래스는붕어빵을만드는틀(= type,=template)과같은것으로,클래스내에정의된메쏘드와멤버변수를사용하기위해서는틀을가지고붕어빵을만드는것같이객체를생성하여야합니다.
객체(object)를초기화하는방법은new연산자를사용하여객체를변수에인스턴스시키는것입니다.
classCart{
var $items; // Items in our shopping cart
// Add $num articles of $artnr to the cart
function add_item ($artnr, $num){
$this->items[$artnr]+= $num;
}
// Take $num articles of $artnr out of the cart
function remove_item ($artnr, $num){
if($this->items[$artnr]> $num){
$this->items[$artnr]-= $num;
returntrue;
}else{
returnfalse;
}
}
}
$cart =newCart;
$cart->add_item("10",1);
위와같이하면클래스Cart에대한객체 $cart가생성됩니다.객체함수 add_item()은장바구니에품목번호""의수량을1개추가하기위해호출됩니다.
지정연산자"->"의의미
"->"는객체의멤버변수또는메쏘드를지정하는데사용되는지정연산자입니다.
C++언어를접해본분은쉽게이해하시겠지만,new연산자로생성되는객체를나타내는객체명에는실제로객체의멤버(변수또는함수)가존재하는것이아니라객체의멤버가존재하는메모리상에위치를나타내는주소(adress)가담겨져있습니다.
이와같이객체지향언어에서는주소를가지고멤버를참조하려면아래와같이지정연산자"->"를이용하게됩니다.
멤버변수를참조할때:객체명->변수;
메쏘드를참조할때 :객체명->함수;
C++언어에서는"->"를화살표멤버연산자라고말하며,"->"의앞쪽에있는식별자(여기서는객체명)가포인터(pointer;주소를의미함)일때그멤버를참조하기위한연산자입니다.
지역변수에초기화된객체
객체를지역변수에인스턴스할수있기때문에,클래스를정의하고객체를생성하는것을하나의모듈로개발할수있습니다.
예제코드:
<?php
function class_in_function(){
class test {
var $a =10;
function test(){
echo "함수 내에 정의된 클래스의 생성자 실행";
}
function echo_test(){
echo "함수 내에 정의된 클래스의 멤버변수 \$a의 값 = ".$this->a."";
}
}
$obj =new test;
$obj->echo_test();
}
class_in_function();
?>
실행결과:
함수내에정의된클래스의생성자실행
함수내에정의된클래스의멤버변수 $a의값=
객체생성할때생성자명을가변함수로지정하기
$classname ="MiniDB";
$obj =new $classname();
이코드는 PHP와 PHP4 모두에서정상적으로동작합니다.
메쏘드명을변경하기(가변함수)
PHP의매뉴얼을보면가변함수(variable function)를지원하는데이것은변수명뒤에괄호가왔을때, PHP는그이름을가진함수를찾아실행하는것입니다.이것은클래스의메쏘드에서도그대로사용할수있습니다.
class test {
function A(){
echo "나 A 함수\n";
}
}
$obj =new test;
$method ="A";
$obj->$method();
이것을응용하여같은실행문으로 A0, A1, A2라는메쏘드에번갈아가면서접근하려면역시가변함수를사용하면됩니다.
class test {
function A0(){
echo "나 A0 함수\n";
}
function A1(){
echo "나 A1 함수\n";
}
function A2(){
echo "나 A2 함수\n";
}
}
$obj =new test;
for($i=0;$i<3;$i++){
$method ="A$i";
$obj->$method();
}
위에것은모두 PHP3와 PHP4에서모두동작되는코드입니다.
만약, PHP4에서만동작시켜도무방하다면아래와같이중괄호를이용하면소스를간결하게코딩할수있습니다.
for($i=0;$i<3;$i++){
$obj->{"a$i"}();
}
객체명을변경하기(가변변수)
가변변수(VariableVariables)의유용함은모두알고있겠지만 PHP4에서는별문제가없지만 PHP에서객체변수를가변변수로사용하기는그리쉽지않습니다.
class test {
var $hello ="hello world";
}
$obj =new test;
$a ="obj";
echo $$a->hello;// or echo ${$a}->hello;
PHP에서위와같이작성하여실행한다면,
Object
Parse error: parse error,...... test.php3 on line 9
와같은에러를만나게됩니다.
그러나 PHP4에서는객체변수에도가변변수를제대로지원하기시작했습니다.
따라서위의예제가에러없이잘실행되지요.그러면 PHP에서는객체변수의이름을변경할수없을까요?
아래와같이 $GLOBALS 배열을사용해보세요.아무문제없이잘실행될겁니다.
class test {
var $hello ="hello world";
}
$obj =new test;
$a ="obj";
echo $GLOBALS[$a]->world();
따라서 PHP3와 PHP4 모두에서동작되기를바란다면 $GLOBALS 배열을이용하여작성하세요.
배열구조의멤버변수를가변변수로다루는방법
class test {
var $arr = array();
function test(){
$this->arr[0]=0;
$this->arr[1]=1;
}
}
$obj =new test;
위와같이클래스 test에배열구조의멤버변수가있을때,이러한멤버변수의배열요소에접근하려면 $obj->arr[0];와같이사용하면됩니다.여기서멤버변수명"arr"을가변변수로처리하려면,
$prop ="arr";
$obj->{"$prop"}[0];
와같이가변변수 $prop를중괄호로묶어주세요.여기서겹따옴표는생략해도됩니다. PHP3와 PHP4에서모두잘동작할것입니다.
댓글목록
등록된 댓글이 없습니다.