[ php ] Class 사용법 정리 2. 객체생성 > php

본문 바로가기
사이트 내 전체검색

php

[ php ] Class 사용법 정리 2. 객체생성

페이지 정보

작성자 웹지기 댓글 0건 조회 7,563회 작성일 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에서모두잘동작할것입니다.

 

추천0 비추천0

댓글목록

등록된 댓글이 없습니다.

Total 82건 6 페이지
  • 7 [ php ] 난수생성 rand, mt_rand
  • 함수rand() 난수생성mt_rand() 향상된 난수 생성srand() 난수생성 초기화getrandmax() 가능한 최대 난수값을 표시rand(최대값, 최소값) 또는 rand()mt_rand(최소값, 최대값) 또는 mt_rand()
  • 웹지기 09-06 5039 0 0 댓글 0
  • 5 [ php ] php에서 mysql 버젼 확인 하기
  • $sql = " SELECT version() AS mysql_version ";$row = sql_fetch($sql);echo $row['mysql_version'];$sql = " SHOW VARIABLES LIKE '%VERSION%' ";$result = sql_query($sql);while($row = sql_fetch_array($result)) { print_r2($row);}mysqli 에서는 오류를 내뱉는다.echo mysql_get_ser...
  • 웹지기 08-30 3986 0 0 댓글 0
  • 4 [ php ] [그누보드5] 사용자 게시글 작성시 관리자가 받는 메일에서 이미지 깨짐현상.
  • 사용자 게시글 작성시 관리자가 받는 메일에서 이미지 깨짐현상./bbs/write_update_mail.php&lt;style&gt;.gnu_content img{width:100%}&lt;/style&gt;헤더부분에 스타일 추가$wr_content불러오는 부분의 div를&lt;div class="gnu_content" 이런식으로 클래스를 추가해서 메일이 발송되게 해줌모바일에서 메일확인하면 테이블의 width가 정해져 있어서 깨진다�...
  • 웹지기 08-30 4781 0 0 댓글 0
  • 3 [ php ] MS Word docx 파일 생성 라이브러리
  • PHPWord : http://phpword.codeplex.com서버상에 docx 파일을 올리고 이파일에 특정 항목의 값을 post로 넘겨받은후 템플릿 파일에 그값을 채워넣고 워드파일 생성ex파일 : PHPWord/Examples/Template.php [이 게시물은 웹지기님에 의해 2018-08-28 14:20:25 php에서 이동 됨]
  • 웹지기 08-24 6099 0 0 댓글 0
+1
  • 2 [ php ] 마법상수 : magic constants __FILE__, __DIR 등등
  • 마법 상수 ¶PHP는 어떤스크립트에서도 유효한 많은 수의 미리 정의된 상수를 제공한다. 하지만 이 상수의 대부분은 다양한 확장(extension)에 의해 생성된다. 그래서 그 확장이 같이 컴파일되어 유효하거나 동적인 로딩이 되어있어야 이런 상수가 존재하게 된다.여덟 가지 마법 상수가 존재한다. 이 상수들은 어디에서 쓰느냐에 따라 용도가 변경된다. 예를 들면, __LINE__상수의 값은 스크립트의 해당 줄과 관련이 있다. 이 특별한 상수들은 대소문자 구별이 없고 다음과 같다:약간의 "마법&...
  • 웹지기 08-23 4953 0 0 댓글 0
  • 1 [ php ] json 한글 깨지는 현상 해결
  • 배열을 json_encode()해서 json으로 바꿀 때 한글 값이 유니코드로 깨져 들어가는 현상을 해결하는 방법PHP 버젼별로 다르게 구현PHP 5.3 이하function my_json_encode($arr){ //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding ar...
  • 웹지기 08-28 8574 0 0 댓글 0
게시물 검색

회원로그인

접속자집계

오늘
5,693
어제
15,358
최대
33,828
전체
8,320,473

그누보드5
Copyright © funyphp.com. All rights reserved.