11. 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. 3 4 EX : 5 <?php 6 var_dump(strrpos("ABCDEF","DEF")); 7 var_dump(strrpos("ABCDEF","DAF")); 8 ?> 9 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(). 13 142. Illegal use of string offsets causes E_ERROR instead of E_WARNING. 15 16 EX : 17 <?php 18 $a = "foo"; 19 unset($a[0][1][2]); 20 ?> 21 22 Fatal error: Cannot use string offset as an array in ... on line 1 23 243. 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. 27 284. 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). 31 32 - mysqli_fetch_row() 33 - mysqli_fetch_array() 34 - mysqli_fetch_assoc() 35 365. 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. 41 426. 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. 48 497. $_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. 55 568. 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 ?> 65 66 Example 2 (throws an error): 67 <?php 68 $a = new a(); 69 interface b{ 70 } 71 class a implements b { 72 } 73 ?> 74 75 Output (example 2) : 76 Fatal error: Class 'a' not found in /tmp/cl.php on line 2 77 789. 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 ?> 90 91 Output (PHP 4): 92 string(6) "foobar" 93 string(9) "extfoobar" 94 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(). 110 11110. 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 } 135 13611. 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 155 156