'phpclass/클래스활용'에 해당되는 글 41건

  1. 2000.06.12 {객체지향언어로서의 PHP}1.함수 중복정의
phpclass/클래스활용2000. 6. 12. 14:49
여기서는 객체지향언어에 대한 이론을 설명하지는 않을 것이며, 단지 객체지향언어에서 다루어지는 기본 개념을 중심으로 PHP에서 어떻게 표현되는가를 다룰 것입니다. 객체지향언어 이론에 대하여 궁금하면 관련서적, 웹사이트를 방문해 보세요.
함수 중복정의(함수 오버로딩;function overloading)란?
함수 오버로딩이란 같은 이름을 가지고 파라미터의 리스트만 다른 함수 여러 개를 생성하는 방법입니다. 이것의 목적은 데이터의 데이터형만 다르다면, 같은 함수 이름으로도 각각의 데이터 데이터형에 맞게 알맞은 연산을 수행하도록 하는 데 있습니다.
PHP3에서의 함수 오버로딩
PHP3 에서는 이와 같이 함수를 중복 정의할 수 있는 함수 오버로딩을 지원하지 않습니다. 이것은 PHP 홈페이지에 게시된 공식문서에서도 잘 나타나 있습니다. 아래는 http://www.php.net/manual/utiltions.php3 문서 내용 중에서 발췌한 것입니다. 이 문서는 오래된 문서라 현재 온라인 상으로는 확인되지 않습니다.
......
PHP does not support function overloading,
nor is it possible to undefine or redefine previously-declared functions.
......
PHP3에서의 함수 오버로딩 구현
PHP 에서 지원하는 변수에 대한 데이터형에는 "integer(정수형)", "double(실수형)", "string(문자열)", "array(배열)", "object(객체)"가 있습니다. 그러나 PHP에서는 C에서처럼 변수에 대한 데이터형을 미리 선언할 필요가 없습니다. 그런데 함수 오버로딩에서는 인수의 데이터형을 가지고 같은 이름의 여러 개의 함수들을 구분시켜 줍니다. 따라서 PHP에서도 함수 오버로딩을 구현하려면 데이터형을 지정할 필요가 있으며 인수의 데이터형이 맞는 함수가 없을 때는 함수명이 같더라도 아무것도 실행해서는 안됩니다. PHP에서는 함수의 인수에 데이터형을 지정할 수 없지만 지정할 수 있다고 가정하고 아래와 같은 함수 오버로딩을 구현할 방법을 찾아보도록 하겠습니다.
[code php;gutter:false] class test {
var $int_value; // 정수형이 저장될 데이터멤버
var $str_value; // 문자열이 저장될 데이터멤버

function setvalue(integer $int_val) {
$this->int_value = $int_val;
}

function setvalue(string $str_val) {
$this->str_value = $str_val;
}

function setvalue(string $str_val, integer $int_val) {
$this->int_value = $int_val;
$this->str_value = $str_val;
}
} [/code]
위와 같은 함수 오버로딩을 구현하려면 아래와 같이 오버로딩 함수명에서 각 인수의 데이터형을 판단하여 데이터형에 맞는 해당 함수로 분기시켜주면 됩니다.
[code php;gutter:false] class test {
var $int_value; // 정수형이 저장될 데이터멤버
var $str_value; // 문자열이 저장될 데이터멤버

function setvalue ($p0="_", $p1="_") {
if (gettype($p0) == "string" && $p0 != "_"
&& gettype($p1) == "integer") {
return $this->setvalue2($p0, $p1);
} else if (gettype($p0) == "string" && $p0 != "_") {
return $this->setvalue1($p0);
} else if (gettype($p0) == "integer") {
return $this->setvalue0();
} else {
die("에러발생");
}
}

function setvalue0 ($int_val) {
$this->int_value = $int_val;
}

function setvalue1 ($str_val) {
$this->str_value = $str_val;
}

function setvalue2 ($str_val, $int_val) {
$this->int_value = $int_val;
$this->str_value = $str_val;
}
} [/code]
PHP4에서의 함수 오버로딩
2000 년5월22일 작성된 온라인 매뉴얼을 살펴보면 PHP4에서도 아직 함수 오버로딩을 지원하지 않는 것 같습니다. 아래는 Chapter 12. Functions User-defined functions 문서 내용 중에서 발췌한 것입니다.
......
In PHP3, functions must be defined before they are referenced.
No such requirement exists in PHP4.

PHP does not support function overloading, nor is it possible to undefine or
redefine previously-declared functions.

PHP3 does not support variable numbers of arguments to functions,
although default arguments are supported
(see Default argument values for more information).
PHP4 supports both: see Variable-length argument lists and
the function references for func_num_args(),
func_get_arg(), and func_get_args() for more information.
http://www.php.net/manual/utiltions.php 05/22/00
......
혹시 함수 오버로딩을 사용할 경우가 생긴다면(별로 없겠지만) PHP에서 정식으로 지원할 때까지는 불편하더라도 PHP3용으로 구현된 함수 오버로딩 코드를 PHP4에서도 계속 사용해야 할 것 같습니다.

Posted by 방글24