11111

Backward Incompatible Changes Пред.

Приложение B. Migrating from PHP 4 to PHP 5

След.

Backward Incompatible Changes

- Although most existing PHP 4 code should work without changes, you should

pay attention to the following backward incompatible changes:

- There are some new reserved

keywords.

  • - strrpos() and strripos() now use

    the entire string as a needle.

  • - Illegal use of string offsets causes E_ERROR instead

    of E_WARNING. An example illegal use is:

    $str = 'abc'; unset($str[0]);.

  • - array_merge() was changed to accept only arrays. If a

    non-array variable is passed, a E_WARNING will be

    thrown for every such parameter. Be careful because your code may start

    emitting E_WARNING out of the blue.

  • - PATH_TRANSLATED server variable is no longer set implicitly under

    Apache2 SAPI in contrast to the situation in PHP 4, where it is set to

    the same value as the SCRIPT_FILENAME server variable when it is not

    populated by Apache. This change was made to comply with the CGI specification. Please refer to bug #23610 for further information,

    and see also the - $_SERVER['PATH_TRANSLATED'] description in the manual. This issue

    also affects PHP versions >= 4.3.2.

  • - The T_ML_COMMENT constant is no longer defined by

    the Tokenizer extension. If

    error_reporting is set to E_ALL, PHP will

    generate a notice. Although the T_ML_COMMENT was

    never used at all, it was defined in PHP 4. In both PHP 4 and PHP 5

    // and /* */ are resolved as the T_COMMENT

    constant. However the PHPDoc style comments /** */, which starting PHP

    5 are parsed by PHP, are recognized as T_DOC_COMMENT.

  • - $_SERVER should be populated with argc and argv if variables_order includes "S". If

    you have specifically configured your system to not create $_SERVER,

    then of course it shouldn't be there. The change was to always make argc

    and argv available in the CLI version regardless of the variables_order setting. As in,

    the CLI version will now always populate the global $argc and $argv

    variables.

  • - An object with no properties is no longer considered "empty".

  • - In some cases classes must be declared before used. It only happens

    only if some of the new features of PHP 5 are used. Otherwise the

    behaviour is the old.

  • - get_class(), get_parent_class()

    and get_class_methods() now return the name of the

    classes/methods as they were declared (case-sensitive) which may lead to

    problems in older scripts that rely on the previous behaviour (the

    class/method name was always returned lowercased). A possible solution

    is to search for those functions in all your scripts and use

    strtolower().

    - This case sensitivity change also applies to the

    magical predefined

    constants __CLASS__,

    __METHOD__, and __FUNCTION__.

    The values are returned exactly as they're declared (case-sensitive).

  • - ip2long() now returns FALSE when an invalid IP

    address is passed as argument to the function, and no longer

    -1.

  • - If there are functions defined in the included file, they can be used in the

    main file independent if they are before return() or after.

    If the file is included twice, PHP 5 issues fatal error because functions

    were already declared, while PHP 4 doesn't complain about it.

    It is recommended to use include_once() instead of

    checking if the file was already included and conditionally return inside

    the included file.

  • - include_once() and require_once()

    first normalize the path of included file on Windows so that including

    A.php and a.php include the file just once.

    -

    Пример B-1. strrpos() and strripos() now

    use the entire string as a needle

    <?php

    var_dump(strrpos('ABCDEF','DEF')); //int(3)

    var_dump(strrpos('ABCDEF','DAF')); //bool(false)

    ?>

    -

    Пример B-2. An object with no properties is no longer considered "empty"

    <?php

    class test { }

    $t = new test();

    var_dump(empty($t)); // echo bool(false)

    if ($t) {

    // Will be executed

    }

    ?>

    -

    Пример B-3. In some cases classes must be declared before used

    <?php

    //works with no errors:

    $a = new a();

    class a {

    }

    //throws an error:

    $a = new b();

    interface c{

    }

    class b implements c {

    }

    ?>

    Пред.

    Начало

    След.

    Migrating from PHP 4 to PHP 5

    Уровень выше

    CLI and CGI 22222

    Free Web Hosting