这周我有一个开卷测试,我被告知测试将是一个练习,提供大量遗留代码并要求“移植”代码。
我了解什么是开卷测试以及它的要求(测试您的思维过程等)但是(这是一个很长的镜头)“移植”可能涉及什么?我对什么是“移植”有一个模糊的概念。
这周我有一个开卷测试,我被告知测试将是一个练习,提供大量遗留代码并要求“移植”代码。
我了解什么是开卷测试以及它的要求(测试您的思维过程等)但是(这是一个很长的镜头)“移植”可能涉及什么?我对什么是“移植”有一个模糊的概念。
移植是将代码从一个环境迁移到另一个环境——通常是从一个操作系统到另一个或从一个硬件平台到另一个,但也可能来自不同的编程语言或同一编程语言的不同版本。
从上下文来看,我猜他们会给你旧 PHP 版本的旧编码风格编写的 PHP 代码,并要求你更新代码以在现代编码标准的现代 PHP 版本上正确运行。
这可能意味着您获得了一些(旧)php4 代码并且应该将其移植到 php5。
在这种情况下,代码应该在error_reporting(E_ALL|E_STRICT)
没有警告消息的情况下使用设置运行。还要检查每个函数/方法的描述是否在某处包含“此函数已被弃用”注释/警告。
Imo 可能的候选人是:会话、类、ereg(posix 正则表达式)甚至可能是register_globals和allow_call_time_pass_reference。
也许您还应该发现“旧”变通方法的使用并用更新的功能替换它们。例如
// $s = preg_replace('/foo/i', 'bar', $input);
// use php5's str_ireplace() instead
$s = str_ireplace('foo', 'bar', $input);
但这取决于您所涵盖的主题。
例如“将此 php4 代码移植到 php5”:
<?php
class Foo {
var $protected_v;
function Foo($v) {
$this->protected_v = $v;
}
function doSomething() {
if ( strlen($this->protected_v) > 0 ) {
echo $this->protected_v{0};
}
}
}
session_start();
if ( session_is_registered($bar) ) {
$foo = new Foo($bar);
$foo->doSomething();
}
答案可能是
<?php
class Foo {
// php5 introduced visibility modifiers
protected $v;
// the "preferred" name of the constructor in php5 is __construct()
// visibility modifiers also apply to method declarations/definitions
public function __construct($v) {
$this->v = $v;
}
public function doSomething() {
if ( strlen($this->v) > 0 ) {
// accessing string elements via {} is deprecated
echo $this->v[0];
}
}
}
session_start();
// session_is_registered() and related functions are deprecated
if ( isset($_SESSION['bar']) ) {
$foo = new Foo($_SESSION['bar']);
$foo->doSomething();
}
移植是指将代码从开发它的平台迁移到另一个平台——无论是从 Windows 到 Unix,还是从 ASP 到 PHP。