- 1. Introduction
- 2. Per PHP version
- 3. Silent changed behaviors
- 4. Per extension
- 5. Error Messages
- Changed behaviors
- 6. array And callable Cannot Be Absolute
- 7. Array Has No Absolute Name
- 8. PHP 8.5 split the missing-abstract-method message by declaration kind
- 9. No Abstract Private Method In Traits
- 10. Accessing Trait Resources Directly Is Not Allowed
- 11. Alias Replace Class
- 12. Anonymous Class Name Includes Extends
- 13. array_key_exists() doesn't work on objects
- 14. array_merge() And Variadic
- 15. Negative Automatic Index From Empty Array
- 16. Automatic Index In Non Empty Array
- 17. Array Usage With String Initialisation
- 18. array_change_key_case() Validates Its Case Argument
- 19. array_filter() Validates Its Mode Argument
- 20. array_intersect() Converts Values While Scanning Inputs
- 21. Several ArrayIterator Methods Are Deprecated
- 22. array_product() New Checks
- 23. array_sum() Checks Operands Thoroughly
- 24. Passing An Object To array_walk() Is Deprecated
- 25. assert Is Reserved Function
- 26. assert() Throws Exception
- 27. Static Properties With Asymmetric Visibility
- 28. Auto-initialization From Boolean
- 29. Using __autoload() is deprecated
- 30. Backed Enum Values Needed To Compile
- 31. Back-tick Operator Is Deprecated
- 32. Base Conversion Functions Warn When Precision Is Lost
- 33. Bitshift And Concat Precedence
- 34. Boolean Used As Array
- 35. Calling Non-Static Method Statically
- 36. Accessing Directly Properties In Trait
- 37. Cannot Call Traits Methods Directly
- 38. No Case With A Semi-colon
- 39. PHP Constants Are Not Case Insensitive
- 40. Cast In Const
- 41. Catch Without Variable
- 42. ceil() Strict Mode
- 43. class_alias() Works On Internal Classes
- 44. ::class On Object
- 45. Underscore Named Class
- 46. Clone A Constant
- 47. Can Clone Readonly Properties
- 48. compact() Throws Notice On Missing Variable
- 49. First-Class Callables Inside Constant Expressions Must Resolve To A Literal Method Name
- 50. Interface Imported Constant Visibility Is Checked
- 51. Constants In Trait
- 52. Declaring A Class Constant Named namespace Is Deprecated
- 53. Making A Constructor A Generator Is Deprecated
- 54. Returning A Value From A Constructor Is Deprecated
- 55. Constants With Objects
- 56. Parameter Contravariance
- 57. convert_uuencode() Works On Empty Strings
- 58. count() Must Count Countable
- 59. Returntype Covariance
- 60. Creating Object On Null
- 61. curl_close() No Longer Flushes The Cookie Jar
- 62. cUrl Moved Away From Resource
- 63. CURLOPT_READFUNCTION Callback Validates Its Return Value
- 64. Array Syntax With Curly Braces Are No More
- 65. datetime With Multiple Signs
- 66. Magic Method __debugInfo() cannot return null
- 67. __debugInfo() Nullable Return Type Is Deprecated
- 68. Constant %s is deprecated
- 69. Making A Destructor A Generator Is Deprecated
- 70. Destructuring Non Arrays
- 71. Die And Exit As Functions
- 72. No More dir() With Null
- 73. dl() Rejects NUL Bytes In The Extension Filename
- 74. ${expression} is deprecated
- 75. DOM Readonly Properties Use Asymmetric Visibility
- 76. Dot And Bitshift Priority
- 77. Dot And Minus Changed Precedence
- 78. Dot And Plus Changed Precedence
- 79. Duplicate Static Definition
- 80. Dynamic Class Constant
- 81. No Dynamic Properties By Default
- 82. E_STRICT Is Deprecated
- 83. E_USER_ERROR Is Deprecated
- 84. each() Has Been Removed
- 85. Enforcing Native PHP ReturnType
- 86. Enforcing Return Type With Spl Classes
- 87. Enums May Now Define __debugInfo()
- 88. eval() Without Try
- 89. explode() Forbids Empty Strings
- 90. Cannot Explode() Null
- 91. Method export() in Reflection Is removed
- 92. Calling FFI::cast() statically is deprecated
- 93. Calling FFI::new() statically is deprecated
- 94. Calling FFI::type() statically is deprecated
- 95. file_get_contents() Needs A Real Path
- 96. Multiple File Functions Reject NUL Bytes In Filenames
- 97. FilessytemIterator Skips Dot Files
- 98. Long php://filter Chains Are Deprecated
- 99. Final Class Constants
- 100. Final Method In Trait
- 101. Final Promoted Properties
- 102. Finfo Moved Away From Resource
- 103. Float Used As Array
- 104. fputcsv() Needs Escape Parameter
- 105. func_get_arg() Changed Behavior
- 106. Generators Don't Return
- 107. get_called_class() Cannot Be Called Outside A Class
- 108. get_class() Needs An Argument
- 109. get_defined_functions() Doesn't Exclude Diabled Functions Anymore
- 110. getenv() Rejects NUL Bytes In The Variable Name
- 111. get_object_vars() Does Not Work On ArrayObject
- 112. No Dynamic Global Variables
- 113. Appending To $GLOBALS
- 114. $GLOBALS Assignement
- 115. Copy Of $GLOBALS
- 116. GMP Shift And Power Operators Deprecate Float Operands
- 117. Several GMP Functions Validate Their Numeric Arguments
- 118. gmp_powm() Reports More Detail On Modulo-By-Zero
- 119. GMP Shift Operators Validate A GMP Right Operand
- 120. Heredoc Syntax In An Array
- 121. hexdec() Warns When The Result Loses Precision
- 122. Default Values With htmlspecialchars()
- 123. http_build_query() supports enumerations
- 124. $http_response_header Is Deprecated
- 125. http_build_query() With An Object Is Deprecated
- 126. Implicit Array Key Conversion
- 127. Implicit Nullable
- 128. implode() Arguments Order
- 129. in_array() String Int Comparisons
- 130. in_array() Doesn't Confuse 0 And Empty String
- 131. Increment Non-alphanumeric
- 132. Increment On Boolean Is Deprecated
- 133. Indirect Modification In Clone
- 134. Inegality Comparisons
- 135. ini_get_all() Includes The Built-in Default Value
- 136. Init Readonly Properties In Child Class
- 137. instanceof Expect Objects
- 138. Integer Used As Array
- 139. Interface Constant Visibility Checks
- 140. Interpolated String Dereferencing
- 141. Calling Static Methods On Strings
- 142. Integer Non-silent Conversion
- 143. Base Conversion Reports Invalid Characters
- 144. is_double(), is_long(), is_integer() And doubleval() Are Deprecated
- 145. isset() On Constants
- 146. iterator_count() Also Count Arrays
- 147. jsonSerialize Must Have Return Type
- 148. Keywords In Namespace
- 149. krsort() Places Integers Before Strings In Keys
- 150. ksort() Now Places Integers Before Strings
- 151. ksort() now uses regular comparison
- 152. libxml_disable_entity_loader() Is Deprecated
- 153. linkinfo() Rejects An Empty Path
- 154. Duplicate Enum Cases Are Not Linted Anymore
- 155. Covariance And Contravariance Are Fatal
- 156. FUNCTION In Closure Changed
- 157. isset()-Materialized Magic Property Skips __get()
- 158. match Is Now A Keyword
- 159. No Max() On Empty Array
- 160. max() Must Contain At Least One Element
- 161. max() On String And Integer
- 162. mb_convert_encoding() Has Deprecated Formats
- 163. Integer Regex With mb_ereg_replace()
- 164. mb_strrpos() Third Argument Is Not Encoding
- 165. Passing An Object To mb_convert_variables() Is Deprecated
- 166. The mbstring Regex (mbregex) Functions Are Deprecated
- 167. metaphone() Is Deprecated
- 168. No min() On Empty Array
- 169. min() Doesn't Accept Empty Arrays
- 170. mixed Is Now A Keyword
- 171. No New Line In Namespaces
- 172. Yield Must Use Integer Or String Keys
- 173. mysqli::stmt_init() And mysqli_get_charset() Are Deprecated
- 174. Passing A $mode To mysqli_store_result() Is Deprecated
- 175. Named Parameters And Variadic
- 176. namespace Is Not Valid As A Class Constant Name
- 177. Negative Index On Strings
- 178. Negative Offset With Strings
- 179. Nested Attributes
- 180. Never Arrow Function
- 181. never Is Now A Keyword
- 182. Direct calls on new
- 183. New Cases In Switch
- 184. Call Method On New
- 185. __sleep() Method Enforces Return Type
- 186. Non-canonical Cast
- 187. Non Static Method Called Statically
- 188. No Reference To $GLOBALS Variable
- 189. Not In A Closure
- 190. Null Used As Array
- 191. Null As Array Offset
- 192. Null With array_key_exists()
- 193. number_format() Validates Its Decimals Argument Range
- 194. PHP Warns When Finding Unconvertible Characters
- 195. Old Constructors
- 196. Old Style Constructor
- 197. Only First Byte
- 198. openlog() Rejects NUL Bytes In The Prefix
- 199. Optional Parameter Are After Compulsory Parameters
- 200. Providing A String That Is Not One Byte Long To ord() Is Deprecated
- 201. Orphaned Parent
- 202. Override Attribute Extended To Class Constants And Enum Cases
- 203. Override Attribute Extended To Properties
- 204. parent Cannot Be Used Anymore In Callable Arrays
- 205. parse_str() Rejects NUL Bytes In The Query String
- 206. Passing Objects Is Deprecated
- 207. pathinfo() Validates Its Flags Argument
- 208. Calling pg_fetch_result() With 2 Arguments Is Deprecated
- 209. $php_errormsg has been removed
- 210. Plus And Concat Precedence
- 211. preg_grep() Returns false On A PCRE Execution Error
- 212. printf() Warns About Unknown Formats
- 213. proc_open() Rejects NUL Bytes In The Working Directory
- 214. putenv() Rejects NUL Bytes In The Assignment
- 215. range() Uses Single Byte Strings
- 216. range() Lists Everything Between Strings
- 217. range() With Int And String
- 218. Calling A Function Named readonly() Is Deprecated
- 219. Readonly Properties Can Have Default Values
- 220. (real) Is Replaced By (float)
- 221. Recursive Comparison Of Arrays
- 222. Reflection Doesn't Return Self
- 223. Reflection Doesn't Return Static
- 224. ReflectionMethod::invoke() Deprecates Passing An Object For A Static Method
- 225. ReflectionMethod Constructor With A Single Argument Is Deprecated
- 226. ReflectionProperty::setValue() Deprecates A Wrong Object Type
- 227. Relative Callable In Strings
- 228. Relaxed Naming With Class Constant
- 229. Return Reference On Void
- 230. Returning From A finally Block Is Deprecated
- 231. PHP native return types are now enforced
- 232. round() Mode Validation
- 233. scandir() Validates Its Sorting Order Argument
- 234. self Cannot Be Used Anymore In Callable Arrays
- 235. Incomplete SessionHandlerInterface Implementations Now Warn
- 236. Session Functions Reject NUL Bytes And session_encode() Changes Its Empty-Session Return Value
- 237. Session Cookies Default To Secure Settings
- 238. __set_state() Method Must Be Static
- 239. set_exception_handler() Must Update Its Type To Throwable
- 240. setlocale() Does Not Affect Echo Anymore
- 241. setlocale() Rejects Extra Arguments When $locales Is An Array
- 242. sleep() Validates Its Seconds Argument Range
- 243. sodium_crypto_pwhash_str() Throws ValueError For Out-Of-Range Limits
- 244. sort() Places Integers Before Strings
- 245. Sorting Closure Must Return Integers
- 246. Spaces In Namespaces
- 247. spaceship Operator Results
- 248. spl_classes() Is Deprecated
- 249. SplFileObject::fgetcsv() And fputcsv() Are Deprecated
- 250. SplFileObject::fgets() No Longer Caches The Current Line
- 251. SplFileObject::next() Always Advances The Stream
- 252. SplFixedArray Is Now An IteratorAggregate
- 253. spl_object_hash() Is Deprecated
- 254. SplObjectStorage::getHash() May No Longer Mutate Storage
- 255. Cannot Bind $this To Static Closure
- 256. Stateless Static Closures Are Cached And Reused
- 257. static Cannot Be Used Anymore In Callable Arrays
- 258. Static Variables Are Linked To Their Method
- 259. Storage Of Static Properties Trait
- 260. Static Variable Accepts Functioncalls As Default
- 261. Static Properties With References
- 262. str_pos() Requires Only Strings
- 263. str_replace() Checks For Arguments
- 264. str_replace() On Arrays Of Objects
- 265. str_replace() Enforces Strings In Array Argument
- 266. strcoll() And SORT_LOCALE_STRING Are Deprecated
- 267. Calling stream_context_set_option() With 2 Arguments Is Deprecated
- 268. strftime() And gmstrftime() Are Deprecated
- 269. String Increments
- 270. String To Integer Comparison
- 271. Strings Are Bigger Than Integers
- 272. strpos() With Out-Of-Range Offset Is A Fatal Error
- 273. strpos() Emits TypeError
- 274. strpos() Emits ValueError
- 275. strpos() Does Not Accept False
- 276. strpos() With Integer Argument
- 277. strpos() Does Not Accept Null As Second Parameter
- 278. strpos() With Null Haystack
- 279. strsplit() With Empty String
- 280. str_split() Throws ValueError With Negative Lengths
- 281. substr() Returns Empty String On Out Of Bond Offset
- 282. switch() Changed Comparison Style
- 283. Length Of tempnam() Has Been Raised
- 284. Tentative Static Returntype With Datetime
- 285. Ternary Associativity
- 286. $this Must Be The Local Object
- 287. throw Is An Expression
- 288. __toString Can Throw Exceptions
- 289. Trailing Comma In Arguments
- 290. Trailing Comma In Calls
- 291. Constants In Traits
- 292. trim() Strips Form Feed By Default
- 293. Typed Class Constant
- 294. Removing $this from a closure is deprecated
- 295. Undefined Constants
- 296. Unpack Arrays In Arrays
- 297. Unpack Array With String Keys
- 298. unpack() Strips Endianness Modifiers From The Result Key
- 299. unserialize() Checks The End Of The String
- 300. unserialize() max_depth Option
- 301. unserialize() Error Report
- 302. Unserialize with the upper case S is deprecated
- 303. (unset) Was Removed
- 304. usleep() Validates Its Microseconds Argument Range
- 305. var_export() Format
- 306. var_export() With Stdclass
- 307. version_compare() Stricter Operators
- 308. vsprint() Requires An Array
- 309. vsprintf() Returns Empty String On Error
- 310. WeakMap Allows Reference Assignment To A Missing Key
- 311. each() Is No More
- 312. Comment Inside yield from
- 313. Cannot Raise Zero To Negative Powers
- 314. Passing An Object As Filter Options To zlib/bzip2 Functions Is Deprecated