phpclass/클래스활용2000. 10. 10. 14:25
호환성
PHP4 >= 4.0RC1
기능
인스턴스에 의해 지정된 멤버변수명과 값 반환
형식
array get_object_vars (object obj)
설명
get_object_vars() 는 클래스를 정의할 때 설정한 멤버변수명과 값뿐만 아니라 객체 생성 후 지정된 멤버변수명과 값을 모두 되돌려 줍니다. 반환되는 배열은 연관배열(associative array)이며, 멤버변수 값을 지정하지 않은 멤버변수는 이 함수의 반환 값에 포함되지 않습니다.
[code php;gutter:false] <?php

class Point2D {
var $x, $y;
var $label;

function Point2D($x, $y) {
$this->x = $x;
$this->y = $y;
}

function setLabel($label) {
$this->label = $label;
}

function getPoint() {
return array("x" => $this->x,
"y" => $this->y,
"label" => $this->label);
}
}

$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));

$p1->setLabel("point #1");
print_r(get_object_vars($p1));

?> [/code]
< 예제 코드 >
Array
(
[x] => 1.233
[y] => 3.445
)
Array
(
[x] => 1.233
[y] => 3.445
[label] => point #1
)
< 실행 결과(HTML 소스) >
참고
get_class_methods(), get_class_vars()

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:24
호환성
PHP4 >= 4.0RC2
기능
현재 문서에 정의된 클래스명을 배열에 담아 반환
형식
array get_declared_classes (void)
설명
get_declared_classes() 함수를 사용하면 현재 스크립트에 정의된 클래스명을 배열에 담아 되돌려 줍니다. 배열 앞부분에는 PHP 스크립트가 현재 문서에 자동으로 삽입시켜주는 클래스가 3개 추가로 포함됩니다. 이와 같이 자동으로 내장되는 클래스는 stdClass(Zend/zend.c에 정의됨), OverloadedTestClass(ext/standard/basic_functions.c에 정의됨), Directory(ext/standard/dir.c에 정의됨)가 있습니다.
또한, PHP를 컴파일할 때 포함하게 되는 특정 라이브러리가 부가적으로 가지고 있는 클래스들이 있습니다. 이와 같이 PHP에 미리정의된 PHP 정의 클래스(predefined classes)와 동일한 이름을 가지고는 사용자 자신의 클래스를 정의할 수 없습니다.
[code php;gutter:false] <?php

// base class with member properties and methods
class Vegetable {
var $edible;
var $color;

function Vegetable( $edible, $color="green" ) {
$this->edible = $edible;
$this->color = $color;
}

function is_edible() {
return $this->edible;
}

function what_color() {
return $this->color;
}
} // end of class Vegetable


// extends the base class
class Spinach extends Vegetable {
var $cooked = false;

function Spinach() {
$this->Vegetable( true, "green" );
}

function cook_it() {
$this->cooked = true;
}

function is_cooked() {
return $this->cooked;
}
} // end of class Spinach

$arr_class = get_declared_classes();

while (list($k,$v)=each($arr_class)) {
echo("\$arr_class[$k]=$v\n");
}

?> [/code]
< 예제 소스 >
$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
< 실행 결과 >
위 예제의 실행결과를 보면, 클래스명 stdClass, OverloadedTestClass, Directory은 PHP 스크립트에 의해 현재 문서에 자동으로 삽입되는 클래스이며, "OCI-Lob"는 PHP 스크립트를 설치할 때 오라클 데이터베이스의 OCI 모듈을 포함시키면서 내장된 클래스이며, 나머지는 사용자가 정의한 클래스들입니다.

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:23
호환성
PHP4 >= 4.0RC1
기능
클래스 정의할 때 기본 지정된 멤버변수를 배열에 담아 반환
형식
array get_class_vars (string class_name)
설명
get_class_vars() 는 클래스를 정의할 때 설정한 멤버변수명과 값을 되돌려 줍니다. 반환되는 배열은 연관배열(associative array)이며, 클래스 정의할 때 멤버변수 값을 지정하지 않은 멤버변수는 이 함수의 반환 값에 포함되지 않습니다. 실행결과를 보면 알겠지만 클래스 Cart 내에서 정의된 멤버변수 $items는 객체생성 후에 그 값이 할당되었다 하더라도 클래스 정의할 때 값이 할당되어 있지 않기 때문에 반환되는 배열에 포함되지 않습니다.
[code php;gutter:false] <?php

class Cart {
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;
return true;
} else {
return false;
}
}
}

class Named_Cart extends Cart {
var $owner = "나 주인";

function set_owner ($name) {
$this->owner = $name;
}
}

$cart = new Named_Cart;
$cart->items = 200;

$aso = get_class_vars("Named_Cart");

while (list($k,$v)= each($aso)) {
echo("$aso[$k]=$v\n");
}

?> [/code]
< 예제 코드 >
$aso[owner]=나 주인
< 실행 결과 >
참고
get_class_methods(), get_object_vars()

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:22
호환성
PHP4 >= 4.0RC1
기능
메소드명 반환 함수, 클래스 메소드명을 배열에 담아 반환
형식
array get_class_methods (string class_name)
설명
get_class_methods()는 클래스에 정의된 메소드명을 배열에 담아서 되돌려 줍니다. 상속되어 정의된 클래스의 경우는 상위클래스에 정의된 메소드명을 모두 포함합니다. 아래에 예제 코드와 실행 결과가 있습니다.
[code php;gutter:false] <?php

class Cart {
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;
return true;
} else {
return false;
}
}
}

class Named_Cart extends Cart {
var $owner = "나 주인";

function set_owner ($name) {
$this->owner = $name;
}
}

$cart = new Named_Cart;
$cart->items = 200;

$aso = get_class_methods("Named_Cart");

while (list($k,$v)= each($aso)) {
echo("$aso[$k]=$v\n");
}

?> [/code]
< 예제 코드 >
$aso[0]=add_item
$aso[1]=remove_item
$aso[2]=set_owner
< 실행 결과 >
참고
get_class_vars(), get_object_vars()

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:21
호환성
PHP4 >= 4.0b2
기능
객체의 클래스명 반환
형식
string get_class (object obj)
설명
get_class() 함수는 객체 obj가 인스턴스되는데 사용된 클래스명을 반환합니다.
참고
get_parent_class(), is_subclass_of()

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:20
호환성
PHP4 >= 4.0b4
기능
클래스가 정의되어 있는지 확인
형식
bool class_exists (string class_name)
설명
class_exists() 함수는 class_name으로 지정된 클래스가 정의되어 있으면 ture를 반환하고 그렇지 않으면 false를 반환합니다.

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:18
호환성
PHP3 >= 3.0.3, PHP4
기능
특정 객체에 포함된 사용자 정의 메소드 호출
형식
mixed call_user_method (string method_name, object obj [, mixed parameter [, mixed ...]])
설명
사용자 정의 객체인 obj로부터 method_name으로 참조되는 해당 메소드를 호출합니다. 아래에 있는 활용 예제에서 클래스를 정의하고, 객체를 인스턴스화하고, print_info 메소드를 간접적으로 호출하기 위해 call_user_method()를 이용합니다.
[code php;gutter:false] <?php

class Country {
var $NAME;
var $TLD;

function Country($name, $tld) {
$this->NAME = $name;
$this->TLD = $tld;
}

function print_info($prestr="") {
echo $prestr."Country: ".$this->NAME."\n";
echo $prestr."Top Level Domain: ".$this->TLD."\n";
}
}

$cntry = new Country("Peru","pe");

echo "* Calling the object method directly\n";
$cntry->print_info();

echo "\n* Calling the same method indirectly\n";
call_user_method ("print_info", $cntry, "\t");

?> [/code]
참고
call_user_func()

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:17
호환성
PHP4 >= 4.0.5
기능
특정 객체에 포함된 사용자 정의 메소드 호출
형식
mixed call_user_method_array (string method_name, object obj [, array paramarr])
설명
사용자 정의 객체인 obj로부터 method_name으로 참조되는 해당 메소드를 호출합니다. call_user_method()가 메소드의 인수를 가변인수리스트 방식으로 전달하는데 반하여 call_user_method_array()는 배열 구조로 전달하는 것이 다릅니다. 아래에 있는 활용 예제에서 클래스를 정의하고, 객체를 인스턴스화하고, print_info 메소드를 간접적으로 호출하기 위해 call_user_method_array()를 이용합니다.
[code php;gutter:false] <?php

class Country {
var $NAME;
var $TLD;

function Country($name, $tld) {
$this->NAME = $name;
$this->TLD = $tld;
}

function print_info($prestr="", $poststr="") {
echo $prestr."Country: ".$this->NAME.$poststr;
echo $prestr."Top Level Domain: ".$this->TLD.$poststr;
}
}

$cntry = new Country("Peru","pe");

echo "* Calling the object method directly\n";
$cntry->print_info();

echo "\n* Calling the same method indirectly\n";
call_user_method_array("print_info", $cntry, array("\t", "\n"));

?> [/code]
참고
call_user_func_array(), call_user_func(), call_user_method()

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:16
PHP 를 컴파일할 때 포함하게 되는 라이브러리에 따라서는 특정 클래스가 미리 정의되어 있을 수 있습니다. 이와같이 미리정의된 PHP 정의 클래스(predefined classes)를 가지고 있는 라이브러리에는 "Ming", "Oracle 8", "qtdom"이 있습니다. 또한 라이브러리에 관계없이 PHP 모든 코드에 포함되어 있는 기본 정의 클래스(standard defined classes)가 있습니다.
구분 해당 라이브러리 PHP 정의 클래스명
기본 정의 클래스
(Standard Defined Classes)
모든 PHP 코드 Directory, stdClass
Ming 정의 클래스
(Ming Defined Classes)
Ming swfshape, swffill, swfgradient, swfbitmap, swftext, swftextfield, swffont, swfdisplayitem, swfmovie, swfbutton, swfaction, swfmorph, swfsprite
Oracle 8 정의 클래스
(Oracle 8 Defined Classes)
Oracle 8 OCI-Lob, OCI-Collection
qtdom 정의 클래스
(qtdom Defined Classes)
qtdom QDomDocument, QDomNode

Posted by 방글24
phpclass/클래스활용2000. 10. 10. 14:12
PHP 스크립트에 내장되어 있는 클래스와 객체 관련 함수에 대하여 살펴보겠습니다.
클래스/객체 관련함수 목록
클래스/객체 함수(class/object function)를 이용하면 클래스와 인스턴스 객체에 대한 정보를 얻을 수 있습니다. 객체를 생성했던 클래스명 뿐만 아니라 해당 클래스의 멤버인 멤버변수와 메소드명도 얻을 수 있습니다. 이러한 함수를 이용하면 객체의 클래스 멤버 뿐만 아니라 객체의 상속관계(parentage; 객체를 생성했던 클래스가 어떤 클래스에서 확장된 것인지를 나타내는 것)를 확인할 수 있습니다. 현재(2002.6)까지 공식문서에 추가된 클래스/객체 관련 함수는 아래와 같이 총 12개가 등록되어 있습니다.
메소드명 기능 호환성
call_user_method_array 특정 객체에 포함된 사용자 정의 메소드 호출(배열인수) PHP4 >= 4.0.5
call_user_method 특정 객체에 포함된 사용자 정의 메소드 호출(가변인수리스트) PHP3 >= 3.0.3, PHP4
class_exists 클래스가 정의되어 있는지 확인 PHP4 >= 4.0b4
get_class 객체의 클래스명 반환 PHP4 >= 4.0b2
get_class_methods 클래스 메소드명 반환 PHP4 >= 4.0RC1
get_class_vars 클래스의 디폴트 멤버변수 반환 PHP4 >= 4.0RC1
get_declared_classes 현재 문서에 정의된 클래스명 반환 PHP4 >= 4.0RC2
get_object_vars 인스턴스에 의해 지정된 멤버변수 반환 PHP4 >= 4.0RC1
get_parent_class 부모클래스명을 반환 PHP4 >= 4.0b2,4.0.5
is_a

지정된 클래스로부터 생성된 객체인지 확인

PHP4 >= 4.2.0
is_subclass_of 객체가 지정된 클래스의 서브클래스에 속하는지 확인 PHP4 >= 4.0b4
method_exists 특정 클래스 메소드가 존재하는지 확인 PHP4 >= 4.0b2
사용 예제
이 예제에서는 우선 기반클래스(base class)와 기반클래스에서 확장된 클래스를 정의합니다. 기반클래스에서는 야채의 일반적인 사항, 식용인지 아닌지와 야채 색깔이 무엇인지를 기술하고 있습니다. 서브클래스 Spinach에서는 야채를 요리하기 위한 것과 야채가 요리되었는가를 확인하는 메소드를 추가하였습니다.
[code php;gutter:false] <?php

// base class with member properties and methods
class Vegetable {
var $edible;
var $color;

function Vegetable( $edible, $color="green" ) {
$this->edible = $edible;
$this->color = $color;
}

function is_edible() {
return $this->edible;
}

function what_color() {
return $this->color;
}
} // end of class Vegetable


// extends the base class
class Spinach extends Vegetable {
var $cooked = false;

function Spinach() {
$this->Vegetable( true, "green" );
}

function cook_it() {
$this->cooked = true;
}

function is_cooked() {
return $this->cooked;
}
} // end of class Spinach

?> [/code]
< Example 1. classes.php >
클래스 Vegetable와 Spinach로부터 2개의 객체를 인스턴스화하고 부모클래스를 포함하여 클래스에 대한 정보를 출력합니다. 또한 몇몇 유틸리티 함수를 정의하는데 이것들은 주로 해당 변수들을 제대로 출력하기 위한 것입니다.
[code php;gutter:false] <?php

include "classes.php";

// utility functions

function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo "\t$prop = $val\n";
}

function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo "\tfunction $method()\n";
}

function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo "Object $obj belongs to class ".get_class($$obj);
echo " a subclass of $class\n";
} else {
echo "Object $obj does not belong to a subclass of $class\n";
}
}

// instantiate 2 objects

$veggie = new Vegetable(true,"blue");
$leafy = new Spinach();

// print out information about objects
echo "veggie: CLASS ".get_class($veggie)."\n";
echo "leafy: CLASS ".get_class($leafy);
echo ", PARENT ".get_parent_class($leafy)."\n";

// show veggie properties
echo "\nveggie: Properties\n";
print_vars($veggie);

// and leafy methods
echo "\nleafy: Methods\n";
print_methods($leafy);

echo "\nParentage:\n";
class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");

?> [/code]
< Example 2. test_script.php >
위의 예제에서 주의하여야 할 한가지 중요한 것은 객체 $leafy가 Vegetable의 서브클래스인 클래스 Spinac의 인스턴스라는 것이며, 따라서 위 스크립트의 마지막 부분이 출력될 것입니다.
veggie: CLASS vegetable
leafy: CLASS spinach, PARENT vegetable

veggie: Properties
edible = 1
color = blue

leafy: Methods
function vegetable()
function is_edible()
function what_color()
function spinach()
function cook_it()
function is_cooked()

Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable
< 출력결과(HTML 소스) >

Posted by 방글24