PHP capability comparison
How tracked PHP language and stdlib features (reference: php-src / Zend PHP)
compare to php-compiler on VM, JIT, and AOT.
This is not a full php-src inventory — only items we measure in
capabilities-syntax.md
and capabilities.md.
Generated 2026-06-02 (matrix mtime).
1 partial · 4 gaps
18 partial · 0 gaps
yes supported · partial subset · no not yet · PHP column = reference has the feature
Language constructs
Classes, control flow, types, and related syntax from the language matrix.
| Feature | PHP | VM | JIT | AOT | Issue |
|---|---|---|---|---|---|
`class` / `new` | yes | yes | yes | yes | #58 |
Anonymous class `new class { }` | yes | yes | yes | yes | #1233 |
Enum declarations `enum Foo: string { case Bar = 'x'; }` | yes | yes | yes | yes | #1356 |
Abstract enum `abstract enum E { case A; }` | yes | yes | yes | yes | #3737 |
Instance methods (`ClassMethod` / `Expr_MethodCall`) | yes | yes | yes | yes | #58 |
Static methods on user classes (`Expr_StaticCall`) | yes | yes | yes | yes | #2209 |
Constructors (`__construct`) | yes | yes | yes | yes | #145 |
`clone` + `__clone()` magic method | yes | yes | yes | yes | #3170 |
Magic methods `__get` / `__set` / `__call` / `__toString` | yes | yes | yes | yes | #146 |
Private methods | yes | yes | yes | yes | #145 |
Property fetch `$this->x` | yes | yes | yes | yes | #58 |
Constructor property promotion | yes | yes | yes | yes | #1359 |
Method return types (`: string` / `: void`) | yes | yes | yes | yes | #55 |
Dynamic property access `$obj->$name` | yes | yes | yes | yes | #1227 |
Variable function call `$fn()` | yes | yes | yes | yes | #56 |
Native user-class link (`phpc build --project`) | yes | yes | yes | yes | #764 |
`instanceof` | yes | yes | yes | yes | #138 |
`instanceof` union RHS `(A | yes | B)` | yes | yes | yes |
`match` expression | yes | yes | yes | yes | #143 |
Closures `function () { }` / `use ($var)` | yes | yes | yes | yes | #72 |
Arrow functions `fn () =>` | yes | yes | yes | yes | #142 |
Generators (`yield` / `foreach`) | yes | yes | yes | yes | #167 |
Fibers (`Fiber`, `Fiber::suspend()`, start/resume) | yes | yes | yes | yes | #3130 |
`ClassName::class` / `static::class` | yes | yes | yes | yes | #740 |
Class member constants `public` / `private` / `protected const` | yes | yes | yes | yes | #2199 |
PHP 8.3 typed class constants (`const array X = [1,2];`, `const string S = 'a';`) | yes | yes | yes | yes | #3592 |
Class constants with `new` object expressions (PHP 8.3) | yes | yes | yes | yes | #3196 |
Late static binding `static::method()` / `static::class` | yes | yes | yes | yes | #1231 |
`new static()` and `: static` return type (late-bound class) | yes | yes | yes | yes | #3412 |
Magic constants `__CLASS__`, `__METHOD__`, `__FUNCTION__` | yes | yes | yes | yes | #199 |
Magic constant `__NAMESPACE__` | yes | yes | yes | yes | #199 |
Magic constants `__DIR__`, `__FILE__` | yes | yes | yes | yes | #707 |
Magic constant `__LINE__` | yes | yes | yes | yes | #715 |
Literal `include`/`require` with `__DIR__` | yes | yes | yes | yes | #475 |
foreach by-reference (`&$v`) | yes | yes | yes | yes | #1222 |
foreach over Iterator / IteratorAggregate objects | yes | yes | yes | yes | #4067 |
ArrayAccess interface — `$obj[$key]` read/write/isset/unset | yes | yes | yes | yes | #3331 |
By-reference parameters (`function f(&$x)`) | yes | yes | yes | yes | #140 |
Return-by-reference (`function &f()` / `$x = &f()`) | yes | yes | yes | yes | #4054 |
Static property `Class::$prop` | yes | yes | yes | yes | #1225 |
Error-control operator `@` on expressions | yes | yes | yes | yes | #3546 |
`unset()` on variables, array offsets, and object properties | yes | yes | yes | yes | #2273 |
Function-local `static $var` / `static $var = <literal>` | yes | yes | yes | yes | #2286 |
Keyed array destructuring (`["a" => $x]`) | yes | yes | yes | yes | #1234 |
`goto` / labels (function scope) | yes | yes | yes | yes | #1228 |
`declare(strict_types=1)` scalar parameter checks | yes | yes | yes | yes | #1229 |
PHP 8.3+ generic array types `list<T>` / `array<K,V>` (parameters and properties) | yes | yes | yes | yes | #3705 |
Variable variables (`$$name`) | yes | yes | yes | yes | #1226 |
Variable function calls (`$fn()`) | yes | yes | yes | yes | #56 |
Invokable objects (`$obj()` / `__invoke`) | yes | yes | yes | yes | #1232 |
First-class callable syntax (`foo(...)`, `Class::m(...)`) | yes | yes | yes | yes | #1363 |
PHP 8.4+ pipe operator (` | yes | >`) | yes | yes | yes |
`use function` / `use const` imports | yes | yes | yes | yes | #2325 |
Namespace group use (`use Foo\{Bar, Baz}`) | yes | yes | yes | yes | #2443 |
Flexible heredoc/nowdoc indentation stripping (PHP 7.3+) | yes | yes | yes | yes | #3636 |
`never` return type | yes | yes | yes | yes | #1358 |
Intersection types (`A&B`) | yes | yes | yes | yes | #1357 |
DNF types (`(A&B) | yes | null`, union of intersections) | yes | yes | yes |
`trait` declarations with method bodies | yes | yes | yes | yes | #2312 |
Simple `use Trait;` in class body | yes | yes | yes | yes | #2314 |
Trait use adaptations (`as` rename, `insteadof` precedence) | yes | yes | yes | yes | #3238 |
Array/argument unpack `...$x` | yes | yes | yes | yes | #1361 |
`__serialize` / `__unserialize` magic methods | yes | yes | yes | yes | #1365 |
Multi-type catch `catch (A | yes | B $e)` | yes | yes | yes |
`try` / `catch` / `throw` | yes | yes | yes | yes | #57 |
throw expressions (PHP 8.0) — `throw` in expression context | yes | yes | yes | yes | #3802 |
readonly classes | yes | yes | yes | yes | #1360 |
readonly properties (per-property) | yes | yes | yes | yes | #3149 |
Property hooks (`get` / `set` on properties) | yes | yes | yes | yes | #3145 |
PHP 8.4 asymmetric property visibility (public private(set), etc.) | yes | yes | yes | yes | #3165 |
User __destruct() | yes | yes | yes | yes | #4096 |
PHP 8 attributes — `ReflectionClass` / `ReflectionMethod` metadata | yes | yes | yes | yes | #1936 |
WeakReference / WeakMap | yes | yes | yes | yes | #3667 |
Heredoc / nowdoc string literals (`<<<LABEL` / `<<<'LABEL'`) | yes | yes | yes | yes | #3187 |
DateTime / DateTimeZone OOP | yes | yes | no | no | #3072 |
`ksort()` (string/int keys, preserve values) | yes | yes | yes | yes | #2271 |
`krsort()` (keys descending) | yes | yes | yes | yes | #2282 |
`asort()` (values ascending, preserve keys) | yes | yes | yes | yes | #2290 |
`arsort()` (values descending, preserve keys) | yes | yes | yes | yes | #2296 |
`rsort()` (values descending, reindex) | yes | yes | yes | yes | #2300 |
`shuffle()` (packed list, Fisher–Yates) | yes | yes | yes | yes | #2310 |
`array_rand()` (packed list keys) | yes | yes | yes | yes | #2321 |
`array_merge()` on string-key associative arrays | yes | yes | yes | yes | #2287 |
Stdlib builtins
Internal functions registered in ext/standard and ext/types.
| Feature | PHP | VM | JIT | AOT | Issue |
|---|---|---|---|---|---|
`__compiler_is_superglobal_name` | yes | yes | yes | yes | — |
`__halt_compiler` | yes | yes | yes | yes | — |
`abs` | yes | yes | yes | yes | — |
`acos` | yes | yes | yes | yes | — |
`addcslashes` | yes | yes | yes | yes | — |
`addslashes` | yes | yes | yes | yes | — |
`array_all` | yes | yes | no | no | — |
`array_any` | yes | yes | no | no | — |
`array_change_key_case` | yes | yes | yes | yes | — |
`array_chunk` | yes | yes | yes | yes | — |
`array_column` | yes | yes | yes | yes | — |
`array_combine` | yes | yes | yes | yes | — |
`array_count_values` | yes | yes | yes | yes | — |
`array_diff` | yes | yes | yes | yes | — |
`array_fill` | yes | yes | yes | yes | — |
`array_fill_keys` | yes | yes | yes | yes | — |
`array_filter` | yes | yes | yes | yes | — |
`array_find` | yes | yes | no | no | — |
`array_find_key` | yes | yes | no | no | — |
`array_first` | yes | yes | yes | yes | — |
`array_flip` | yes | yes | yes | yes | — |
`array_intersect` | yes | yes | yes | yes | — |
`array_is_list` | yes | yes | yes | yes | — |
`array_key_exists` | yes | yes | yes | yes | — |
`array_key_first` | yes | yes | yes | yes | — |
`array_key_last` | yes | yes | yes | yes | — |
`array_keys` | yes | yes | yes | yes | — |
`array_last` | yes | yes | yes | yes | — |
`array_map` | yes | yes | yes | yes | — |
`array_merge` | yes | yes | yes | yes | — |
`array_merge_recursive` | yes | yes | yes | yes | — |
`array_multisort` | yes | yes | yes | yes | — |
`array_pad` | yes | yes | yes | yes | — |
`array_pop` | yes | yes | yes | yes | — |
`array_product` | yes | yes | yes | yes | — |
`array_push` | yes | yes | yes | yes | — |
`array_rand` | yes | yes | yes | yes | — |
`array_reduce` | yes | yes | yes | yes | — |
`array_replace` | yes | yes | yes | yes | — |
`array_replace_recursive` | yes | yes | yes | yes | — |
`array_reverse` | yes | yes | yes | yes | — |
`array_search` | yes | yes | yes | yes | — |
`array_shift` | yes | yes | yes | yes | — |
`array_slice` | yes | yes | yes | yes | — |
`array_splice` | yes | yes | yes | yes | — |
`array_sum` | yes | yes | yes | yes | — |
`array_unique` | yes | yes | yes | yes | — |
`array_unshift` | yes | yes | yes | yes | — |
`array_values` | yes | yes | yes | yes | — |
`array_walk` | yes | yes | yes | yes | — |
`array_walk_recursive` | yes | yes | no | no | — |
`arsort` | yes | yes | yes | yes | — |
`asin` | yes | yes | yes | yes | — |
`asort` | yes | yes | yes | yes | — |
`assert` | yes | yes | yes | yes | — |
`atan` | yes | yes | yes | yes | — |
`atan2` | yes | yes | yes | yes | — |
`base64_decode` | yes | yes | yes | yes | — |
`base64_encode` | yes | yes | yes | yes | — |
`base_convert` | yes | yes | yes | yes | — |
`basename` | yes | yes | yes | yes | — |
`bin2hex` | yes | yes | yes | yes | — |
`bindec` | yes | yes | yes | yes | — |
`boolval` | yes | yes | yes | yes | — |
`ceil` | yes | yes | yes | yes | — |
`chdir` | yes | yes | yes | yes | — |
`chgrp` | yes | yes | yes | yes | — |
`chmod` | yes | yes | yes | yes | — |
`chown` | yes | yes | yes | yes | — |
`chr` | yes | yes | yes | yes | — |
`chunk_split` | yes | yes | yes | yes | — |
`class_alias` | yes | yes | yes | yes | — |
`class_exists` | yes | yes | yes | yes | — |
`class_implements` | yes | yes | yes | yes | — |
`class_parents` | yes | yes | yes | yes | — |
`class_uses` | yes | yes | yes | yes | — |
`clearstatcache` | yes | yes | yes | yes | — |
`closedir` | yes | yes | yes | yes | — |
`compact` | yes | yes | yes | yes | — |
`constant` | yes | yes | yes | yes | — |
`convert_uudecode` | yes | yes | yes | yes | — |
`convert_uuencode` | yes | yes | yes | yes | — |
`copy` | yes | yes | yes | yes | — |
`cos` | yes | yes | yes | yes | — |
`cosh` | yes | yes | yes | yes | — |
`count` | yes | yes | yes | yes | — |
`count_chars` | yes | yes | yes | yes | — |
`crc32` | yes | yes | yes | yes | — |
`crc32c` | yes | yes | yes | yes | — |
`crypt` | yes | yes | yes | yes | — |
`date` | yes | yes | yes | yes | — |
`debug_backtrace` | yes | yes | yes | yes | — |
`decbin` | yes | yes | yes | yes | — |
`dechex` | yes | yes | yes | yes | — |
`decoct` | yes | yes | yes | yes | — |
`define` | yes | yes | yes | yes | — |
`defined` | yes | yes | yes | yes | — |
`deg2rad` | yes | yes | yes | yes | — |
`dirname` | yes | yes | yes | yes | — |
`disk_free_space` | yes | yes | yes | yes | — |
`disk_total_space` | yes | yes | yes | yes | — |
`diskfreespace` | yes | yes | yes | yes | — |
`disktotalspace` | yes | yes | yes | yes | — |
`dl` | yes | yes | yes | yes | — |
`doubleval` | yes | yes | yes | yes | — |
`enum_exists` | yes | yes | yes | yes | — |
`error_clear_last` | yes | yes | yes | yes | — |
`error_get_last` | yes | yes | yes | yes | — |
`error_reporting` | yes | yes | yes | yes | — |
`escapeshellarg` | yes | yes | yes | yes | — |
`escapeshellcmd` | yes | yes | yes | yes | — |
`eval` | yes | yes | yes | yes | — |
`exp` | yes | yes | yes | yes | — |
`explode` | yes | yes | yes | yes | — |
`expm1` | yes | yes | yes | yes | — |
`extension_loaded` | yes | yes | yes | yes | — |
`extract` | yes | yes | yes | yes | — |
`fclose` | yes | yes | yes | yes | — |
`fdiv` | yes | yes | yes | yes | — |
`feof` | yes | yes | yes | yes | — |
`fflush` | yes | yes | yes | yes | — |
`fgetc` | yes | yes | yes | yes | — |
`fgetcsv` | yes | yes | yes | yes | — |
`fgets` | yes | yes | yes | yes | — |
`file` | yes | yes | yes | yes | — |
`file_exists` | yes | yes | yes | yes | — |
`file_get_contents` | yes | yes | yes | yes | — |
`file_put_contents` | yes | yes | yes | yes | — |
`fileatime` | yes | yes | yes | yes | — |
`filectime` | yes | yes | yes | yes | — |
`filegroup` | yes | yes | yes | yes | — |
`fileinode` | yes | yes | yes | yes | — |
`filemtime` | yes | yes | yes | yes | — |
`fileowner` | yes | yes | yes | yes | — |
`fileperms` | yes | yes | yes | yes | — |
`filesize` | yes | yes | yes | yes | — |
`filetype` | yes | yes | yes | yes | — |
`filter_input` | yes | yes | yes | yes | — |
`filter_var` | yes | yes | yes | yes | — |
`floatval` | yes | yes | yes | yes | — |
`flock` | yes | yes | yes | yes | — |
`floor` | yes | yes | yes | yes | — |
`flush` | yes | yes | yes | yes | — |
`fmod` | yes | yes | yes | yes | — |
`fnmatch` | yes | yes | yes | yes | — |
`fopen` | yes | yes | yes | yes | — |
`forward_static_call` | yes | yes | yes | yes | — |
`forward_static_call_array` | yes | yes | yes | yes | — |
`fpassthru` | yes | yes | yes | yes | — |
`fputcsv` | yes | yes | yes | yes | — |
`fread` | yes | yes | yes | yes | — |
`frexp` | yes | yes | yes | yes | — |
`fseek` | yes | yes | yes | yes | — |
`fstat` | yes | yes | yes | yes | — |
`ftell` | yes | yes | yes | yes | — |
`ftruncate` | yes | yes | yes | yes | — |
`func_get_args` | yes | yes | yes | yes | — |
`func_num_args` | yes | yes | yes | yes | — |
`function_exists` | yes | yes | yes | yes | — |
`fwrite` | yes | yes | yes | yes | — |
`gc_collect_cycles` | yes | yes | yes | yes | — |
`gc_disable` | yes | yes | no | no | — |
`gc_enable` | yes | yes | no | no | — |
`gc_enabled` | yes | yes | no | no | — |
`get_called_class` | yes | yes | yes | yes | — |
`get_class` | yes | yes | yes | yes | — |
`get_class_methods` | yes | yes | yes | yes | — |
`get_class_vars` | yes | yes | yes | yes | — |
`get_debug_type` | yes | yes | yes | yes | — |
`get_declared_classes` | yes | yes | yes | yes | — |
`get_declared_enums` | yes | yes | yes | yes | — |
`get_declared_functions` | yes | yes | yes | yes | — |
`get_declared_interfaces` | yes | yes | yes | yes | — |
`get_declared_traits` | yes | yes | yes | yes | — |
`get_defined_constants` | yes | yes | yes | yes | — |
`get_defined_functions` | yes | yes | yes | yes | — |
`get_defined_vars` | yes | yes | yes | yes | — |
`get_html_translation_table` | yes | yes | yes | yes | — |
`get_loaded_extensions` | yes | yes | yes | yes | — |
`get_mangled_object_vars` | yes | yes | no | no | — |
`get_meta_tags` | yes | yes | yes | yes | — |
`get_object_id` | yes | yes | yes | yes | — |
`get_object_vars` | yes | yes | yes | yes | — |
`get_parent_class` | yes | yes | yes | yes | — |
`get_resource_id` | yes | yes | yes | yes | — |
`get_resources` | yes | yes | yes | yes | — |
`getallheaders` | yes | yes | yes | yes | — |
`getcwd` | yes | yes | yes | yes | — |
`getdate` | yes | yes | yes | yes | — |
`getenv` | yes | yes | yes | yes | — |
`gethostbynamel` | yes | yes | yes | yes | — |
`gethostname` | yes | yes | yes | yes | — |
`getmygrgid` | yes | yes | yes | yes | — |
`getmyinode` | yes | yes | yes | yes | — |
`getmypid` | yes | yes | yes | yes | — |
`getprotobyname` | yes | yes | yes | yes | — |
`getprotobynumber` | yes | yes | yes | yes | — |
`getrusage` | yes | yes | yes | yes | — |
`getservbyname` | yes | yes | yes | yes | — |
`getservbyport` | yes | yes | yes | yes | — |
`gettimeofday` | yes | yes | yes | yes | — |
`gettype` | yes | yes | yes | yes | — |
`glob` | yes | yes | yes | yes | — |
`gmdate` | yes | yes | yes | yes | — |
`gzcompress` | yes | yes | no | no | — |
`gzdecode` | yes | yes | no | no | — |
`gzdeflate` | yes | yes | no | no | — |
`gzencode` | yes | yes | no | no | — |
`gzinflate` | yes | yes | no | no | — |
`gzuncompress` | yes | yes | no | no | — |
`hash` | yes | yes | yes | yes | — |
`hash_equals` | yes | yes | yes | yes | — |
`hash_hmac` | yes | yes | yes | yes | — |
`hash_pbkdf2` | yes | yes | yes | yes | — |
`header` | yes | yes | yes | yes | — |
`header_list` | yes | yes | yes | yes | — |
`header_register_callback` | yes | yes | yes | yes | — |
`header_remove` | yes | yes | yes | yes | — |
`headers_list` | yes | yes | no | no | — |
`headers_sent` | yes | yes | yes | yes | — |
`hex2bin` | yes | yes | yes | yes | — |
`hexdec` | yes | yes | yes | yes | — |
`highlight_file` | yes | yes | yes | yes | — |
`highlight_string` | yes | yes | yes | yes | — |
`hrtime` | yes | yes | yes | yes | — |
`html_entity_decode` | yes | yes | yes | yes | — |
`htmlentities` | yes | yes | yes | yes | — |
`htmlspecialchars` | yes | yes | yes | yes | — |
`htmlspecialchars_decode` | yes | yes | yes | yes | — |
`http_build_query` | yes | yes | yes | yes | — |
`http_response_code` | yes | yes | yes | yes | — |
`hypot` | yes | yes | yes | yes | — |
`implode` | yes | yes | yes | yes | — |
`in_array` | yes | yes | yes | yes | — |
`ini_get` | yes | yes | yes | yes | — |
`ini_set` | yes | yes | yes | yes | — |
`intdiv` | yes | yes | yes | yes | — |
`interface_exists` | yes | yes | yes | yes | — |
`intval` | yes | yes | yes | yes | — |
`is_a` | yes | yes | yes | yes | — |
`is_array` | yes | yes | yes | yes | — |
`is_bool` | yes | yes | yes | yes | — |
`is_countable` | yes | yes | yes | yes | — |
`is_dir` | yes | yes | yes | yes | — |
`is_double` | yes | yes | yes | yes | — |
`is_executable` | yes | yes | yes | yes | — |
`is_file` | yes | yes | yes | yes | — |
`is_finite` | yes | yes | yes | yes | — |
`is_float` | yes | yes | yes | yes | — |
`is_infinite` | yes | yes | yes | yes | — |
`is_int` | yes | yes | yes | yes | — |
`is_integer` | yes | yes | yes | yes | — |
`is_iterable` | yes | yes | yes | yes | — |
`is_link` | yes | yes | yes | yes | — |
`is_long` | yes | yes | yes | yes | — |
`is_nan` | yes | yes | yes | yes | — |
`is_null` | yes | yes | yes | yes | — |
`is_numeric` | yes | yes | yes | yes | — |
`is_object` | yes | yes | yes | yes | — |
`is_readable` | yes | yes | yes | yes | — |
`is_resource` | yes | yes | yes | yes | — |
`is_scalar` | yes | yes | yes | yes | — |
`is_string` | yes | yes | yes | yes | — |
`is_subclass_of` | yes | yes | yes | yes | — |
`is_uploaded_file` | yes | yes | yes | yes | — |
`is_writable` | yes | yes | yes | yes | — |
`iterator_apply` | yes | yes | yes | yes | — |
`iterator_count` | yes | yes | yes | yes | — |
`iterator_to_array` | yes | yes | yes | yes | — |
`join` | yes | yes | yes | yes | — |
`json_decode` | yes | yes | yes | yes | — |
`json_encode` | yes | yes | yes | yes | — |
`json_last_error` | yes | yes | yes | yes | — |
`json_last_error_msg` | yes | yes | yes | yes | — |
`json_validate` | yes | yes | yes | yes | — |
`krsort` | yes | yes | yes | yes | — |
`ksort` | yes | yes | yes | yes | — |
`lcfirst` | yes | yes | yes | yes | — |
`lchgrp` | yes | yes | yes | yes | — |
`lchown` | yes | yes | yes | yes | — |
`ldexp` | yes | yes | yes | yes | — |
`levenshtein` | yes | yes | yes | yes | — |
`link` | yes | yes | yes | yes | — |
`log` | yes | yes | yes | yes | — |
`log10` | yes | yes | yes | yes | — |
`log1p` | yes | yes | yes | yes | — |
`lstat` | yes | yes | yes | yes | — |
`ltrim` | yes | yes | yes | yes | — |
`max` | yes | yes | yes | yes | — |
`mb_strlen` | yes | yes | yes | yes | — |
`md5` | yes | yes | yes | yes | — |
`md5_file` | yes | yes | yes | yes | — |
`memory_get_peak_usage` | yes | yes | yes | yes | — |
`memory_get_usage` | yes | yes | yes | yes | — |
`metaphone` | yes | yes | yes | yes | — |
`method_exists` | yes | yes | yes | yes | — |
`microtime` | yes | yes | yes | yes | — |
`min` | yes | yes | yes | yes | — |
`mkdir` | yes | yes | yes | yes | — |
`modf` | yes | yes | yes | yes | — |
`move_uploaded_file` | yes | yes | yes | yes | — |
`natcasesort` | yes | yes | yes | yes | — |
`natsort` | yes | yes | yes | yes | — |
`nl2br` | yes | yes | yes | yes | — |
`number_format` | yes | yes | yes | yes | — |
`ob_end_clean` | yes | yes | yes | yes | — |
`ob_end_flush` | yes | yes | yes | yes | — |
`ob_get_clean` | yes | yes | yes | yes | — |
`ob_get_contents` | yes | yes | yes | yes | — |
`ob_get_length` | yes | yes | yes | yes | — |
`ob_get_level` | yes | yes | yes | yes | — |
`ob_get_status` | yes | yes | yes | yes | — |
`ob_implicit_flush` | yes | yes | yes | yes | — |
`ob_start` | yes | yes | yes | yes | — |
`octdec` | yes | yes | yes | yes | — |
`opendir` | yes | yes | yes | yes | — |
`ord` | yes | yes | yes | yes | — |
`pack` | yes | yes | yes | yes | — |
`parse_str` | yes | yes | yes | yes | — |
`parse_url` | yes | yes | yes | yes | — |
`password_get_info` | yes | yes | yes | yes | — |
`password_hash` | yes | yes | yes | yes | — |
`password_needs_rehash` | yes | yes | yes | yes | — |
`password_verify` | yes | yes | yes | yes | — |
`pathinfo` | yes | yes | yes | yes | — |
`php_sapi_name` | yes | yes | yes | yes | — |
`php_uname` | yes | yes | yes | yes | — |
`phpc_deploy_path` | yes | yes | yes | yes | — |
`phpc_run_command` | yes | yes | yes | yes | — |
`phpversion` | yes | yes | yes | yes | — |
`pi` | yes | yes | yes | yes | — |
`pow` | yes | yes | yes | yes | — |
`preg_filter` | yes | yes | yes | yes | — |
`preg_grep` | yes | yes | yes | yes | — |
`preg_last_error` | yes | yes | yes | yes | — |
`preg_last_error_msg` | yes | yes | yes | yes | — |
`preg_match` | yes | yes | yes | yes | — |
`preg_match_all` | yes | yes | yes | yes | — |
`preg_quote` | yes | yes | yes | yes | — |
`preg_replace` | yes | yes | yes | yes | — |
`preg_replace_callback` | yes | yes | yes | yes | — |
`preg_split` | yes | yes | yes | yes | — |
`print_r` | yes | yes | no | no | — |
`printf` | yes | yes | yes | yes | — |
`property_exists` | yes | yes | yes | yes | — |
`putenv` | yes | yes | yes | yes | — |
`quoted_printable_decode` | yes | yes | yes | yes | — |
`quoted_printable_encode` | yes | yes | yes | yes | — |
`quotemeta` | yes | yes | yes | yes | — |
`rad2deg` | yes | yes | yes | yes | — |
`random_bytes` | yes | yes | yes | yes | — |
`random_int` | yes | yes | yes | yes | — |
`range` | yes | yes | yes | yes | — |
`rawurldecode` | yes | yes | yes | yes | — |
`rawurlencode` | yes | yes | yes | yes | — |
`readdir` | yes | yes | yes | yes | — |
`readfile` | yes | yes | yes | yes | — |
`readline` | yes | yes | yes | yes | — |
`readlink` | yes | yes | yes | yes | — |
`realpath` | yes | yes | yes | yes | — |
`register_shutdown_function` | yes | yes | yes | yes | — |
`rename` | yes | yes | yes | yes | — |
`restore_error_handler` | yes | yes | yes | yes | — |
`restore_exception_handler` | yes | yes | yes | yes | — |
`rewind` | yes | yes | yes | yes | — |
`rewinddir` | yes | yes | yes | yes | — |
`rmdir` | yes | yes | yes | yes | — |
`round` | yes | yes | yes | yes | — |
`rsort` | yes | yes | yes | yes | — |
`rtrim` | yes | yes | yes | yes | — |
`scandir` | yes | yes | yes | yes | — |
`serialize` | yes | yes | yes | yes | — |
`session_destroy` | yes | yes | yes | yes | — |
`session_id` | yes | yes | yes | yes | — |
`session_name` | yes | yes | yes | yes | — |
`session_regenerate_id` | yes | yes | yes | yes | — |
`session_start` | yes | yes | yes | yes | — |
`session_write_close` | yes | yes | yes | yes | — |
`set_error_handler` | yes | yes | yes | yes | — |
`set_exception_handler` | yes | yes | yes | yes | — |
`setcookie` | yes | yes | yes | yes | — |
`setrawcookie` | yes | yes | yes | yes | — |
`settype` | yes | yes | yes | yes | — |
`sha1` | yes | yes | yes | yes | — |
`sha1_file` | yes | yes | yes | yes | — |
`shell_exec` | yes | yes | yes | yes | — |
`show_source` | yes | yes | yes | yes | — |
`shuffle` | yes | yes | yes | yes | — |
`similar_text` | yes | yes | yes | yes | — |
`sin` | yes | yes | yes | yes | — |
`sinh` | yes | yes | yes | yes | — |
`sizeof` | yes | yes | yes | yes | — |
`sleep` | yes | yes | yes | yes | — |
`sort` | yes | yes | yes | yes | — |
`soundex` | yes | yes | yes | yes | — |
`spl_autoload_register` | yes | yes | yes | yes | — |
`sprintf` | yes | yes | yes | yes | — |
`sqrt` | yes | yes | yes | yes | — |
`sscanf` | yes | yes | yes | yes | — |
`stat` | yes | yes | yes | yes | — |
`str_contains` | yes | yes | yes | yes | — |
`str_decrement` | yes | yes | yes | yes | — |
`str_ends_with` | yes | yes | yes | yes | — |
`str_getcsv` | yes | yes | yes | yes | — |
`str_increment` | yes | yes | yes | yes | — |
`str_ireplace` | yes | yes | yes | yes | — |
`str_pad` | yes | yes | yes | yes | — |
`str_repeat` | yes | yes | yes | yes | — |
`str_replace` | yes | yes | yes | yes | — |
`str_rot13` | yes | yes | yes | yes | — |
`str_shuffle` | yes | yes | yes | yes | — |
`str_split` | yes | yes | yes | yes | — |
`str_starts_with` | yes | yes | yes | yes | — |
`str_word_count` | yes | yes | yes | yes | — |
`strcasecmp` | yes | yes | yes | yes | — |
`strchr` | yes | yes | yes | yes | — |
`strcmp` | yes | yes | yes | yes | — |
`strcspn` | yes | yes | yes | yes | — |
`stream_context_create` | yes | yes | yes | yes | — |
`stream_set_chunk_size` | yes | yes | yes | yes | — |
`stream_set_read_buffer` | yes | yes | yes | yes | — |
`stream_set_timeout` | yes | yes | yes | yes | — |
`stream_set_write_buffer` | yes | yes | yes | yes | — |
`strip_tags` | yes | yes | yes | yes | — |
`stripcslashes` | yes | yes | yes | yes | — |
`stripos` | yes | yes | yes | yes | — |
`stripslashes` | yes | yes | yes | yes | — |
`stristr` | yes | yes | yes | yes | — |
`strlen` | yes | yes | yes | yes | — |
`strnatcasecmp` | yes | yes | yes | yes | — |
`strnatcmp` | yes | yes | yes | yes | — |
`strncasecmp` | yes | yes | yes | yes | — |
`strncmp` | yes | yes | yes | yes | — |
`strpbrk` | yes | yes | yes | yes | — |
`strpos` | yes | yes | yes | yes | — |
`strrchr` | yes | yes | yes | yes | — |
`strrev` | yes | yes | yes | yes | — |
`strrpos` | yes | yes | yes | yes | — |
`strspn` | yes | yes | yes | yes | — |
`strstr` | yes | yes | yes | yes | — |
`strtok` | yes | yes | yes | yes | — |
`strtolower` | yes | yes | yes | yes | — |
`strtoupper` | yes | yes | yes | yes | — |
`strtr` | yes | yes | yes | yes | — |
`strval` | yes | yes | yes | yes | — |
`substr` | yes | yes | yes | yes | — |
`substr_compare` | yes | yes | yes | yes | — |
`substr_count` | yes | yes | yes | yes | — |
`substr_replace` | yes | yes | yes | yes | — |
`symlink` | yes | yes | yes | yes | — |
`sys_get_temp_dir` | yes | yes | yes | yes | — |
`sys_getloadavg` | yes | yes | yes | yes | — |
`tan` | yes | yes | yes | yes | — |
`tanh` | yes | yes | yes | yes | — |
`tempnam` | yes | yes | yes | yes | — |
`time` | yes | yes | yes | yes | — |
`tmpfile` | yes | yes | yes | yes | — |
`touch` | yes | yes | yes | yes | — |
`trait_exists` | yes | yes | yes | yes | — |
`trigger_error` | yes | yes | yes | yes | — |
`trim` | yes | yes | yes | yes | — |
`uasort` | yes | yes | yes | yes | — |
`ucfirst` | yes | yes | yes | yes | — |
`ucwords` | yes | yes | yes | yes | — |
`uksort` | yes | yes | yes | yes | — |
`umask` | yes | yes | yes | yes | — |
`uniqid` | yes | yes | yes | yes | — |
`unlink` | yes | yes | yes | yes | — |
`unpack` | yes | yes | yes | yes | — |
`unserialize` | yes | yes | yes | yes | — |
`urldecode` | yes | yes | yes | yes | — |
`urlencode` | yes | yes | yes | yes | — |
`usleep` | yes | yes | yes | yes | — |
`usort` | yes | yes | yes | yes | — |
`utf8_decode` | yes | yes | yes | yes | — |
`utf8_encode` | yes | yes | yes | yes | — |
`var_dump` | yes | yes | no | no | — |
`var_export` | yes | yes | yes | yes | — |
`version_compare` | yes | yes | yes | yes | — |
`vfprintf` | yes | yes | yes | yes | — |
`vprintf` | yes | yes | yes | yes | — |
`vsprintf` | yes | yes | yes | yes | — |
`web_bool` | yes | yes | yes | yes | — |
`web_int` | yes | yes | yes | yes | — |
`web_string` | yes | yes | yes | yes | — |
`wordwrap` | yes | yes | yes | yes | — |
Self-host gaps ·
Development status ·
Regenerate: php script/generate-pages-capability-comparison.php