首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP框架对遗留PHP4的支持?

PHP框架对遗留PHP4的支持?
EN

Stack Overflow用户
提问于 2009-11-11 17:21:14
回答 3查看 488关注 0票数 0

我知道PHP4已经“死了”,但是我们有大约20多个客户端仍然位于使用PHP4的服务器上,我们直到一两年左右才会得到任何服务器升级。

我正要开始重构和改进我们的核心web框架,它现在被编码为最小的公分母PHP4 (例如所有的类都有变量$foo )。

我从来没有在PHP4中做过任何面向对象的工作,但是我想知道我是否应该为不同的PHP版本制作不同的类,并根据PHP的版本包括那个版本?我意识到的缺点是,如果进行了更新,我将不得不更新两个地方,而这可能没有实际的优势。

因此,如果有人能提供关于如何支持遗留PHP版本的提示,我将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-11 18:26:37

PEAR的大部分仍然是针对php4的,所以你可以把它作为一个“框架”来使用。我相信drupal和codeignitor也在瞄准php4 (也许cakephp也是如此?)。

objects和php4最大的问题是对象是按值传递的,因此您需要使用引用来获取大多数其他语言(包括php5)对对象具有的常见语义。您必须非常小心,始终将引用分配给对象。否则它将被隐式克隆。这是单调乏味的,如果你搞砸了也很难调试。此外,它还会使您的代码与php5不兼容。例如:

创建对象:

代码语言:javascript
复制
$foo =& new Foo();

将对象作为参数传递给函数:

代码语言:javascript
复制
class Bar {
  function cuux(&$foo) {
  }
}
$bar =& new Bar();
$bar->cuux($foo);

由于参数是引用,所以不能传递常量。因此,如果您必须传递NULL而不是对象,则必须首先将NULL赋给局部变量。例如:

代码语言:javascript
复制
$bar =& new Bar();
$foo = null;
$bar->cuux($foo);

从函数返回对象:

代码语言:javascript
复制
class Bar {
  function &doink() {
    $foo =& new Foo();
    return $foo;
  }
}
$bar =& new Bar();
$foo =& $bar->doink();

请注意,您必须将$foo赋给一个变量,这使得不可能直接返回另一个函数的结果。例如:这是非法的:

代码语言:javascript
复制
class Bar {
  function &doink() {
    return $this->foo->doink();
  }
}

它应该是:

代码语言:javascript
复制
class Bar {
  function &doink() {
    $tmp =& $this->foo->doink();
    return $tmp;
  }
}

只要错过其中一个,你就完蛋了。另外,要确保你对引用的行为有很好的理解--它们并不是很直观。

票数 1
EN

Stack Overflow用户

发布于 2009-11-11 17:31:25

确保您的类是用PHP 4语法编写的,即:

代码语言:javascript
复制
class MyClass {
    var $my; // PHP4 style declaration
    function MyClass() { // PHP4 constructor     
      $this->__construct(); // calling PHP5 constructor
    }
    function __construct() { // PHP5 constructor       
       $this->my = 1;
       ...other initialization stuff...
    }
    ...
}

因此,它在两个版本中都能很好地工作。

票数 1
EN

Stack Overflow用户

发布于 2009-11-11 17:54:12

我很难想象我会为php4开发任何东西,但如果我必须这样做,我可能会做两个代码库来保持php5代码的整洁和美观。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1714023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档