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

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

php

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

페이지 정보

작성자 웹지기 댓글 0건 조회 7,623회 작성일 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건 1 페이지
  • 82 [ php ] foreach() 오류 Invalid argument supplied for foreach()
  • Invalid argument supplied for foreach() 이러한 오류가 발생하는것은 foreach에 검색하는 변수의 값이 비어있기 때문. 어쩔수 없이 빈값인지 확인해야 한다. if(!emepty($변수)) { foreach($변수 AS $key) { echo "샬랄라"; } } 이런식으로 감싸줘야 ㅡㅡ;;
  • 웹지기 06-08 9404 0 0 댓글 0
  • 81 [ php ] php 7.2 count() 사용시 에러 조치
  • Severity: Warning --&gt; count(): Parameter must be an array or an object that implements Countable 기존에는 빈값일 때 문제 없었는데, 7.2버젼에서는 빈값이면 0이 아니기 때문에 오류가 발생했다. if(count($num) &gt; 0) { echo "test"; } 이부분에서 문제가 생겨서 다음처럼 수정을 했다. i...
  • 웹지기 06-08 8808 0 0 댓글 0
  • 80 [ php ] phpsocket.io 사용법
  • Start php start.php start for debug mode php start.php start -dfor daemon mode php start.php restart Stop php start.php stop Status php start.php status
  • 웹지기 05-08 15941 0 0 댓글 0
  • 79 [ php ] php에서 0값의 인식문제
  • $a = 0; if(isset($a) &amp;&amp; $a!="") echo "0있어"; else echo "0없어"; 현재는 이러한 형태로 해놓은 상태이다.
  • 웹지기 03-21 6759 0 0 댓글 0
  • 78 [ php ] php error root write ( php 오류 root에 저장하기 )
  • php 오류를 root페이지에 저장하고 싶을 때 /home/test/public_html 위 폴더가 root라고 할 때 해당폴더에 저장할 파일명을 아래처럼 적어준다. &lt;?php ini_set("log_errors", 1); ini_set("error_log", "/home/test/public_html/php-error.log"); ?&gt; 간단하게 ...
  • 웹지기 02-21 6710 0 0 댓글 2
  • 77 [ php ] htmlspecialchars 와 json 의 관계
  • htmlspecialchars는 특수문자를 HTML 엔티티로 변환해준다. 수행되는 번역 Character Replacement &amp;(ampersand) &amp;amp; "(double quote) &amp;quot;, unles...
  • 웹지기 12-04 7692 1 0 댓글 1
  • 76 [ php ] 위도 경도로 직선거리 계산하기
  • 첫번째 위도 경도, 두번째 위도 경도 를 통해서 직선거리 구하기 함수를 만들고 그에 해당하는 위도와 경로를 설정해서 거기를 환산해보면 된다. 값은 거리상의 km이다 소수점 아래 몇짜리까지 사용할 것인지는 알아서 판단하면 된다. &lt;?php /** * Calculates the great-circle distance between two points, with * the Haversine formula. * @param float $latitu...
  • 웹지기 10-03 8305 0 0 댓글 0
  • 75 [ php ] php 객체지향 - 클래스 정의, 객체 생성, 접근, 생성자, 소멸자
  • 클래스 정의 - 객체는 class 키워드로 클래스를 정의 - 클래스의 정의에는 클래스이름(대문자 소문자 구분)과 속성 메소드가 포함 - 클래스는 데이터를 저장하는 속성 값을 가지고 있슴. - 데이터를 가공 / 처리하기 위한 메소드를 포함 객체 - 자바와 흡사하고 trait(특성)이 추가 되었슴. - 클래스 외부에서 클래스의 static(고정), constant(상수)에 접근할 때, 클래스 내부에서 상속 계층상의 프로퍼티나 메소드에 접근 할 때는 -&gt;가...
  • 웹지기 05-16 6564 0 0 댓글 0
  • 74 [ php ] php 절차지향 객체지향
  • 절차지향(procedural programming) - 절차지향 프로그램은 위에서 아래로 흐르는 순차적인 처리 - 프로그램 전체가 유기적으로 연결되도록 만드는 프로그램 객체지향(OOP, object-oriented programming) - 객체지향 프로그램은 개발하려는 것을 기능별로 묶어 모듈화로 하드웨어가 중복 연산되지 않게 함 - 모듈을 재활용하는 방식이므로 하드웨어 처리량이 줄어듬 - 데이터와 절차를 하나를 덩어리로 묶어서 사용, 컴퓨터 부품을 하나씩 사서 조립하는것과 같음 ...
  • 웹지기 05-16 5935 0 0 댓글 0
  • 73 [ php ] 스코프 해결 연산자 / Scope Resolution Operator (::)
  • Scope Resolution Operator (Paamayim Nekudotayim이라고도 함) 또는 더 간단한 용어인 이중 콜론은 정적 , 상수 및 재정의 된 속성 또는 클래스의 메서드에 대한 액세스를 허용하는 토큰입니다 . 클래스 정의 외부에서 이러한 항목을 참조 할 때 클래스 이름을 사용하십시오. PHP 5.3.0부터 변수를 사용하여 클래스를 참조 할 수 있습니다. 변수의 값은 키워드가 될 수 없습니다 (예 : 자기 , 부모 및 정적 ). Paamayim Nekudotayim은 처음...
  • 웹지기 05-07 5685 0 0 댓글 0
  • 70 [ php ] php 7.x에 대한 상수 정의( define( ) ) 부분에 관하여.......
  • 이제는 상수도 잘 사용해야 할 것 같습니다. 기존 php 5.x 이하버젼에서는 define('_GNUBOARD_', false); 일때는 defined('_GNUBOARD_') 출력하면 아무것도 뜨지 않았던 걸로 기억을 합니다. 7.X 버젼에서 define('_GNUBOARD_', false); 일때는 defined('_GNUBOARD_') 를 출력해보면 1이라는 숫자가 뜨는군요. define('_TEST_',''); 빈값일때도 1을 출력하는군요 define('_GN...
  • 웹지기 12-18 7327 0 0 댓글 0
  • 69 [ php ] searialize(), unserialize() 배열의 직렬화(일렬화), 일반화, 많은 필드…
  • (PHP 4, PHP 5, PHP 7) serialize — 값의 저장 표현을 생성 설명 string serialize ( mixed $value ) 값의 저장 표현을 생성합니다. 이는 PHP 값을 저장하거나 전달할 때 자료형이나 구조를 잃어버리지 않게 합니다. 일렬화된 문자열을 다시 PHP 변수로 만드려면, unserialize()를 사용합니다. 인수 value 일렬화할 값. serialize()는 resource형을 제외한 모든 형을 다룹니다. 자기 자신을...
  • 웹지기 12-06 7469 0 0 댓글 0
  • 68 [ php ] 상대경로와 절대경로, 열린문서의 절대경로, 상대경로, url, uri 나타내기
  • 1. 절대경로 - 어떠한 웹페이지나 파일이 가지고 있는 고유한 경로를 말한다. - 예를들어 https://funyphp.com, C:\users\document\funyphp.jpg 등을 모두 절대 경로라고한다. - 다르게는 '그 위치'라는 개념이라고 말할 수 있는데 주소라고 생각하면 이해하기 더 쉽다. - 예를 들어 내가 만약 d:\file 또는 c:\file\img.jpg 등 절대 경로를 알고 있으면 그곳으로 바로 이동하거나 그곳에 있는 파일을 바로 실행 가능하다는 것. - 따라서, ...
  • 웹지기 11-07 28784 0 0 댓글 0
게시물 검색

회원로그인

접속자집계

오늘
5,782
어제
9,384
최대
33,828
전체
8,412,338

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