Changelog for beta 9013V1.1w
[tomato.git] / release / src / router / php / README.PHP4-TO-PHP5-THIN-CHANGES
blob0a2c6d6657131357132ec479a832ed980bb9cdbc
1 1. strrpos() and strripos() now use the entire string as a needle.  Be aware
2    that the existing scripts may no longer work as you expect.
4    EX :
5    <?php
6    var_dump(strrpos("ABCDEF","DEF"));
7    var_dump(strrpos("ABCDEF","DAF"));
8    ?>
10    Will give you different results. The former returns 3 while the latter
11    returns false rather than the position of the last occurrence of 'D'.
12    The same applies to strripos().
14 2. Illegal use of string offsets causes E_ERROR instead of E_WARNING.
16    EX :
17    <?php
18    $a = "foo";
19    unset($a[0][1][2]);
20    ?>
22    Fatal error: Cannot use string offset as an array in ... on line 1
24 3. array_merge() was changed to accept only arrays. If a non-array variable is
25    passed, a E_WARNING will be thrown for every such parameter. Be careful
26    because your code may start emitting E_WARNING out of the blue.
28 4. Be careful when porting from ext/mysql to ext/mysqli. The following
29    functions return NULL when no more data is available in the result set
30    (ext/mysql's functions return FALSE).
32     - mysqli_fetch_row()
33     - mysqli_fetch_array()
34     - mysqli_fetch_assoc()
36 5. PATH_TRANSLATED server variable is no longer set implicitly under
37    Apache2 SAPI in contrast to the situation in PHP 4, where it is set to the
38    same value as the SCRIPT_FILENAME server variable when it is not populated
39    by Apache.  This change was made to comply with the CGI specification.
40    Please refer to bug #23610 for further information.
42 6. Starting PHP 5.0.0 the T_ML_CONSTANT constant is no longer defined by the
43    ext/tokenizer extension. If error_reporting is set to E_ALL notices will
44    be produced. Instead of T_ML_CONSTANT for /* */ the T_COMMENT constant 
45    is used, thus both // and /* */ are resolved as the T_COMMENT constant.
46    However the PHPDoc style comments /** */ ,which starting PHP 5 are parsed
47    by PHP, are recongnized as T_DOC_COMMENT.
49 7. $_SERVER should be populated with argc and argv if variables_order
50    includes "S".  If you have specifically configured your system to not
51    create $_SERVER, then of course it shouldn't be there.  The change was to
52    always make argc and argv available in the CLI version regardless of the
53    variables_order setting.  As in, the CLI version will now always populate
54    the global $argc and $argv variables.
56 8. In some cases classes must be declared before used. It only happens only
57    if some of the new features of PHP 5 are used. Otherwise the behaviour is
58    the old.
59    Example 1 (works with no errors):
60    <?php
61    $a = new a();
62    class a {
63    }
64    ?>
66    Example 2 (throws an error):
67    <?php 
68    $a = new a();
69    interface b{
70    }
71    class a implements b {
72    } 
73    ?>
75    Output (example 2) :
76    Fatal error: Class 'a' not found in /tmp/cl.php on line 2
78 9. get_class() starting PHP 5 returns the name of the class as it was
79    declared which may lead to problems in older scripts that rely on
80    the previous behaviour - the class name is lowercased. Expect the
81    same behaviour from get_parent_class() when applicable.
82    Example :
83    <?php
84    class FooBar {
85    }
86    class ExtFooBar extends FooBar{}
87    $a = new FooBar();
88    var_dump(get_class($a), get_parent_class($a));
89    ?>
91    Output (PHP 4):
92    string(6) "foobar"
93    string(9) "extfoobar"
95    Output (PHP 5):
96    string(6) "FooBar"
97    string(9) "ExtFooBar"
98    ----------------------------------------------------------------------
99    Example code that will break :
100    //....
101    function someMethod($p) {
102      if (get_class($p) != 'helpingclass') {
103        return FALSE;
104      }
105      //...
106    }
107    //...
108    Possible solution is to search for get_class() and get_parent_class() in
109    all your scripts and use strtolower().
111 10. get_class_methods() returns the names of the methods of a class as they
112    declared. In PHP4 the names are all lowercased.
113    Example code :
114    <?php
115    class Foo{
116      function doFoo(){}
117      function hasFoo(){}
118    }
119    var_dump(get_class_methods("Foo")); 
120    ?>
121    Output (PHP4):
122    array(2) {
123      [0]=>
124      string(5) "dofoo"
125      [1]=>
126      string(6) "hasfoo"
127    }
128    Output (PHP5):
129    array(2) {
130      [0]=>
131      string(5) "doFoo"
132      [1]=>
133      string(6) "hasFoo"
134    }
136 11. Assignment $this is impossible. Starting PHP 5.0.0 $this has special
137     meaning in class methods and is recognized by the PHP parser. The latter
138     will generate a parse error when assignment to $this is found
139     Example code :
140     <?php
141     class Foo {
142       function assignNew($obj) {
143         $this = $obj;
144       }
145     }
146     $a = new Foo();
147     $b = new Foo();
148     $a->assignNew($b);
149     echo "I was executed\n";
150     ?>
151     Output (PHP 4):
152     I was executed
153     Output (PHP 5):
154     PHP Fatal error:  Cannot re-assign $this in /tmp/this_ex.php on line 4