PHP4에서 메소드를 직렬화/객체화하기
예를 들어 아래와 같이 예제를 작성하여 PHP3와 PHP4 스크립트에 각각 실행하여 보면, test2.php를 실행하였을 때 PHP4에서는 정상적으로 메소드가 실행되지만 PHP3에서는 에러가 발생합니다.
[code php;gutter:true]<?php
// 파일명 : test1.php
class test {
var $a;
var $b;
function output() {
return "나 함수";
}
}
$obj = new test;
$obj->a = 0;
$obj->b = "나 b";
echo "<p>".$obj->a."</p>";
echo "<p>".$obj->b."</p>";
echo "<p>".$obj->output()."</p>";
$ser = urlencode(serialize($obj));
echo "<p><A href=test2.php?ser=$ser>TEST2.PHP</A></p>";
?> [/code]
// 파일명 : test1.php
class test {
var $a;
var $b;
function output() {
return "나 함수";
}
}
$obj = new test;
$obj->a = 0;
$obj->b = "나 b";
echo "<p>".$obj->a."</p>";
echo "<p>".$obj->b."</p>";
echo "<p>".$obj->output()."</p>";
$ser = urlencode(serialize($obj));
echo "<p><A href=test2.php?ser=$ser>TEST2.PHP</A></p>";
?> [/code]
[code php;gutter:true]
<?php
// 파일명 : test2.php
class test {
var $a;
var $b;
function output() {
return "나 함수";
}
}
$obj = unserialize(stripslashes($ser));
echo "<p>".$obj->a."</p>";
echo "<p>".$obj->b."</p>";
echo "<p>".$obj->output()."</p>";
?>
<p><A href=test1.php>TEST1.PHP</A></p> [/code]
// 파일명 : test2.php
class test {
var $a;
var $b;
function output() {
return "나 함수";
}
}
$obj = unserialize(stripslashes($ser));
echo "<p>".$obj->a."</p>";
echo "<p>".$obj->b."</p>";
echo "<p>".$obj->output()."</p>";
?>
<p><A href=test1.php>TEST1.PHP</A></p> [/code]
아래는 PHP3에서 실행한 결과입니다. PHP3에서는 serialize()/unserialize()가 객체의 메소드를 지원하지 않기 때문에 test2.php를 실행할 때에 17번 라인에서 에러가 발생합니다.
test1.php를 실행하였을 때:
0
나 b
나 함수
TEST2.PHP
test2.php를 실행하였을 때:
0
나 b
Fatal error: Function call to a non-function (output)
in /home/httpd/homepage/phpclass/exam2/simple/test2.php on line 17
0
나 b
나 함수
TEST2.PHP
test2.php를 실행하였을 때:
0
나 b
Fatal error: Function call to a non-function (output)
in /home/httpd/homepage/phpclass/exam2/simple/test2.php on line 17
아래는 PHP4에서 실행한 결과입니다. PHP4에서는 serialize() -> unserialize() 과정을 거친 객체가 정상적으로 복원되었다는 것을 알 수 있습니다. 앞장에서 설명하였지만 메소드 정의는 별도로 포함시켜야 하는 것을 잊어서는 안됩니다. 메소드 정의를 생략한다면 역시 에러를 만나게 될 것입니다.
'phpclass > 클래스활용' 카테고리의 다른 글
{객체에 관련된 정보}5.일반적인 사항 (0) | 2000.10.19 |
---|---|
{객체에 관련된 정보}4.메소드 다루기(PHP3) (0) | 2000.10.19 |
{객체에 관련된 정보}2.Serialize/Unserialize (0) | 2000.10.19 |
{객체에 관련된 정보}1.클래스와 인스턴스 (0) | 2000.10.17 |
{클래스&객체함수}14.method_exists (0) | 2000.10.10 |