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