Что означает «переносить» устаревший код на PHP? - PullRequest
0 голосов
/ 30 марта 2010

На этой неделе у меня тест с открытой книгой, и меня уведомили, что этот тест будет упражнением, в соответствии с которым предоставляется часть устаревшего кода и требование «портировать» код.

Я понимаю, что такое тест с открытой книгой и требования к нему (для проверки вашего мыслительного процесса и т. Д.), Но (это долгий путь), что может включать в себя «перенос»? У меня есть смутное представление о том, что такое «портирование».

Ответы [ 3 ]

1 голос
/ 30 марта 2010

Портирование - это миграция кода из одной среды в другую - часто из одной ОС в другую или с одной аппаратной платформы на другую, но также потенциально из другого языка программирования или из другой версии того же языка программирования.

Исходя из контекста, я предполагаю, что они дадут вам код PHP, написанный в старом стиле кодирования для старой версии PHP, и попросят вас обновить код для корректной работы в современной версии PHP с современными стандартами кодирования.

1 голос
/ 30 марта 2010

Это может означать, что вы получили (старый) код php4 и должны перенести его на php5.
В этом случае код должен работать с настройкой error_reporting(E_ALL|E_STRICT) без предупреждающих сообщений. Также проверьте описание каждой функции / метода, содержит ли она примечание / предупреждение "Эта функция УСТАРЕЛА".
Наиболее вероятные кандидаты: сессии, классы, 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();
}
1 голос
/ 30 марта 2010

Под переносом понимается перенос кода с платформы, на которой он был разработан, на другую платформу - будь то Windows на Unix или ASP на PHP.

...