风筝一路高歌一路飞来......

PHP4和PHP5共存的应用程序应该注意的一些问题

上一篇 / 下一篇  2008-02-20 15:54:19 / 个人分类:PHP

或者说,在PHP5环境下运行PHP4程序需要注意的一些问题:
 
1. 最重要的:传递对象的差别!PHP4传递对象是按值传递的,PHP5则更类似于Java,传递的是对象引用(Java术语中,参数也是“值传递”的,不过Java中变量保存的就是对象引用而非实体,这一点PHP5和Java是一致的)。如果PHP4程序中在一个函数或方法中传入了对象,并且在函数或方法中修改了对象,并且在调用该函数或方法后又试图取用对象,那么在PHP5环境下是一定要注意的。很有可能BUG就出现在这里。
 
2. get_class(),get_parent_class()和get_class_methods()的返回值:这两个函数在PHP4中并不区分类名的大小写,而5中区分,因此,如果4的程序中用get_class或get_parent_class()判断了对象的类,那么在5下很有可能就会出现问题。
比如
<?php
 
class MyClass
{
    //...Class body
}
 
$a = new MyClass();
 
if (get_class($a) == "MyClass")
{
    echo "Valid class.";
}
else
{
    echo "Invalid class!";
}
?>
在4下,get_class($a)会返回myclass,而5下会返回MyClass。因此,上述程序的运行结果刚好相反。
 
3. 如果4和5之间通过序列化方式传递对象,那么除了2是一个要注意的问题外,还要注意两者反序列化时的差别。
通常来说,5可以解析4序列化后的对象,但是4通常不能解析5序列化后的对象。而对于4序列化对象的字段,5均解析为public。因此,如果同样定义4和5的同类对象,试图通过序列化方式来达到两种环境下的公用,则要非常小心。
例:
<?php
 
//PHP4
class A
{
    var $_a = "Hello world!";
}
 
$a = new A();
$str = serialize($a);
 
?>
 
<?php
 
//PHP5
class A
{
    private $_a;
}
 
//Get $str from some context...
//$str is a string that PHP4 just serialized.
$a = unserialize($str);
print_r($a);
 
?>
你会很惊奇地发现,运行5的程序输出的结果会有相同的两个$_a!并不报错,但却不能使用private的那个!


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar