phpclass/클래스활용2000. 10. 19. 14:40
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]
[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]
아래는 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
아래는 PHP4에서 실행한 결과입니다. PHP4에서는 serialize() -> unserialize() 과정을 거친 객체가 정상적으로 복원되었다는 것을 알 수 있습니다. 앞장에서 설명하였지만 메소드 정의는 별도로 포함시켜야 하는 것을 잊어서는 안됩니다. 메소드 정의를 생략한다면 역시 에러를 만나게 될 것입니다.
test1.php를 실행하였을 때:

0
나 b
나 함수

TEST2.PHP

test2.php를 실행하였을 때:

0
나 b
나 함수

TEST1.PHP

Posted by 방글24