对于传统PHP4 PHP框架的支持?(PHP Framework support for legac

2019-10-18 06:54发布

我知道,PHP4是“死”的,但也有我们的客户,仍然位于在使用PHP4的服务器大约二十二左右,而我们不会得到任何服务器升级,直到一两年左右。

我正要开始致力于重构和提高我们的核心网络架构,这是目前编码的最小公分母,PHP4(例如,所有类都具有变量$ FOO)。

我从来没有做过任何PHP4 OO但我不知道我是否应该为PHP版本进行不同的类,并且基于PHP的版本包括版本? 我认识的缺点是,我想如果有一个更新是为了更新两个地方,并有可能成为没有现实世界的优势吧。

因此,如果任何人都可以提供他们如何支持传统的PHP版本的提示,我将不胜感激。

Answer 1:

大多数PEAR的仍瞄准PHP4,所以你可以使用它作为一个“框架”。 我相信Drupal和codeignitor也仍然瞄准PHP4(也或许CakePHP的?)。

使用对象和PHP4的最大问题是,对象是按值传递,所以你需要使用引用来获取常用语义,大多数其他语言中有物体(包括PHP5)。 你必须非常小心,总是分配给对象的引用。 否则将被隐式克隆。 这是乏味的很辛苦,如果你搞砸了调试。 此外,它会使你的代码在PHP5不兼容。 例如。:

创建一个对象:

$foo =& new Foo();

通过一个对象作为参数的函数:

class Bar {
  function cuux(&$foo) {
  }
}
$bar =& new Bar();
$bar->cuux($foo);

由于参数是引用,你不能传递一个常数。 所以,如果你必须NULL传递,而不是一个对象,你必须先分配到空的局部变量。 例如。:

$bar =& new Bar();
$foo = null;
$bar->cuux($foo);

从函数返回的对象:

class Bar {
  function &doink() {
    $foo =& new Foo();
    return $foo;
  }
}
$bar =& new Bar();
$foo =& $bar->doink();

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

class Bar {
  function &doink() {
    return $this->foo->doink();
  }
}

它应该是:

class Bar {
  function &doink() {
    $tmp =& $this->foo->doink();
    return $tmp;
  }
}

小姐只是那些&符号之一,你就完了。 此外,请确保您有引用的行为很好理解 - 他们不完全直观。



Answer 2:

确保你的类都写在PHP 4的语法,即:

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...
    }
    ...
}

因此,将在两个PHP版本工作的伟大。



Answer 3:

我很难想象我开发PHP4什么,但如果我被迫我可能做两个代码库保持PHP5代码干净,漂亮。



文章来源: PHP Framework support for legacy PHP4?
标签: php php4