[ php ] Class 사용법 정리 1. 클래스 정의
페이지 정보
작성자 웹지기 댓글 0건 조회 6,778회 작성일 18-09-11 14:28본문
1.클래스정의
클래스란?
클래스는객체의변수와함수를정의하는템플릿이며,이에따라변수로표현되는데이터영역과이러한데이터영역에접근할수있는함수로구성됩니다.
클래스내에정의된변수를멤버변수(member variable)라고하고함수를메쏘드(method)라고합니다.
C++과같은객체지향언어에서는멤버변수를데이터멤버,메쏘드를멤버함수라고호칭합니다.
PHP에서클래스를사용하는것은 C++또는자바와거의비슷합니다.
클래스정의
클래스를정의(class definition)할때는키워드"class"를사용합니다.
클래스를구성하는멤버변수와메쏘드를정의할때는"var"과"function"이라는키워드를사용합니다.
"function"은일반함수를정의할때도사용되지만"var"은클래스의멤버변수를정의할때만사용되는키워드로,멤버변수를정의할때는반드시명시하여야합니다.
예를들어클래스는아래와같이정의합니다.
이예는 PHP 매뉴얼에있는것으로수정하지않고가져왔습니다.
이예에서는 $items라는멤버변수와 add_item, remove_item라는메쏘드가정의되어있습니다.
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;
}
}
}
멤버변수의초기화
PHP에서는멤버변수값을아래와같이상수또는변수를이용하여초기화할수있습니다.
상수로초기화할때:
classCart{
var $items =0; // Items in our shopping cart
}
변수로초기화할때(1):
classCart{
var $items; // Items in our shopping cart
functionCart($items){
$this->items = $items;
}
}
변수로초기화할때(2):
$items =0;
classCart{
var $items = $GLOBALS["items"]; // Items in our shopping cart
}
반면 PHP4에서는var변수에는상수로만초기화할수있고,상수가아닌값을가지고초기화할때는생성자를이용하여야합니다.
즉,var $items = $GLOBALS["items"];와같은표현은허용하지않습니다.
따라서아래와같은표현은 PHP4에서는허용하지않습니다.
classCart{
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner ='Fred '.'Jones';
var $items = array("VCR","TV");
}
PHP4에서초기화할때동일한결과를얻으려면아래와같이생성자를이용합니다.
classCart{
var $todays_date;
var $name;
var $owner;
var $items;
functionCart(){
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
}
}
PHP4 예약어
stdClass
stdClass는Zend에서내부적으로사용하고있는예약어입니다.따라서사용자는클래스명으로 stdClass를사용할수없습니다.
get_declared_classes()함수를사용하면현재스크립트에정의된클래스명을배열에담아되돌려줍니다.따라서이함수를이용하면 stdClass의존재를확인할수있습니다.
<?php
classVegetable{
}
classSpinachextendsVegetable{
}
$arr_class = get_declared_classes();
while(list($k,$v)=each($arr_class)){
echo("\$arr_class[$k]=$v\n");
}
?>
이문서를실행하면아래와같은결과를얻을수있습니다.
$arr_class[0]=stdClass
$arr_class[1]=OverloadedTestClass
$arr_class[2]=Directory
$arr_class[3]=OCI-Lob
$arr_class[4]=vegetable
$arr_class[5]=spinach
위예제의실행결과를보면,사용자가정의한 vegetable, spinach 외에도 stdClass,OverloadedTestClass,Directory, OCI-Lob가있는것을볼수있습니다.
좀더자세한것은메뉴"클래스&객체 함수 >> get_declared_classes()"를살펴보시기바랍니다.
매직함수(magic function)
__sleep, __wakeup과같이"__"로시작하는매직함수는 PHP 클래스내에서특수한목적으로사용됩니다.
따라서이함수들이가지고있는문서화된매직기능을사용할필요가없다면클래스내에이함수들을정의해서는안됩니다.
자세한것은메뉴에서"매직함수"장을살펴보기바랍니다.
$this가 무엇에 쓰는 물건인고?
클래스메쏘드내에서만사용되며,클래스의현재인스턴스를참조할때사용하는변수이며,예를들어현재객체내에 something라고명명된임의의변수또는함수를참조하기위해서는 $this->something을사용하여야합니다.
즉,"$this"의의미는new연산자에의해생성될객체자신을의미합니다.
그러니아직생성되지않은객체자신을의미하는의사(擬似)변수(pseudo variable)이며,"my own"또는"current object"라고불리웁니다.
앞에서클래스를붕어빵틀과같다고했습니다.정의된클래스에의해생성된객체는붕어빵틀로만들어낸수많은붕어빵이지요.
아래예에서본다면, $붕어빵1->make("특급밀가루")으로 make()메쏘드에접근한다면이때 make()메쏘드내의 $this는 $붕어빵1을의미하고, $붕어빵2->make("중급밀가루")으로접근한다면
이때 $this는 $붕어빵2를의미하고, $붕어빵3->make("저급밀가루")으로접근한다면이때 $this는 $붕어빵3을의미합니다.
class붕어빵{
var재료;
function make($재료){
$this->재료= $재료;
......
}
}
$붕어빵1=new붕어빵;// 인스턴스 "붕어빵1"
$붕어빵2=new붕어빵;// 인스턴스 "붕어빵2"
$붕어빵3=new붕어빵;// 인스턴스 "붕어빵3"
$붕어빵1->make("특급밀가루");
$붕어빵2->make("중급밀가루");
$붕어빵3->make("저급밀가루");
관련링크
- http://phpisnotcheap.tistory.com/4 1717회 연결
댓글목록
등록된 댓글이 없습니다.