diff --git a/Phar/Phar.php b/Phar/Phar.php
index 5f373bd50..675adce0e 100644
--- a/Phar/Phar.php
+++ b/Phar/Phar.php
@@ -555,7 +555,8 @@ public function offsetUnset($localName): void {}
* @return bool
*/
#[TentativeType]
- public function setAlias(#[LanguageLevelTypeAware(['8.0' => 'string'], default: '')] $alias): bool {}
+ #[LanguageLevelTypeAware(['8.4' => 'true'], default: 'bool')]
+ public function setAlias(#[LanguageLevelTypeAware(['8.0' => 'string'], default: '')] $alias) {}
/**
* (Unknown)
@@ -570,10 +571,11 @@ public function setAlias(#[LanguageLevelTypeAware(['8.0' => 'string'], default:
* @return bool TRUE on success or FALSE on failure.
*/
#[TentativeType]
+ #[LanguageLevelTypeAware(['8.4' => 'true'], default: 'bool')]
public function setDefaultStub(
#[LanguageLevelTypeAware(['8.0' => 'string|null'], default: '')] $index = null,
#[LanguageLevelTypeAware(['8.0' => 'string|null'], default: '')] $webIndex = null
- ): bool {}
+ ) {}
/**
* (PHP >= 5.3.0, PECL phar >= 1.0.0)
diff --git a/PhpStormStubsMap.php b/PhpStormStubsMap.php
index 14cd53864..9bd6023f3 100644
--- a/PhpStormStubsMap.php
+++ b/PhpStormStubsMap.php
@@ -7104,6 +7104,7 @@ final class PhpStormStubsMap
'CURLOPT_SUPPRESS_CONNECT_HEADERS' => 'curl/curl_d.php',
'CURLOPT_TCP_FASTOPEN' => 'curl/curl_d.php',
'CURLOPT_TCP_KEEPALIVE' => 'curl/curl_d.php',
+ 'CURLOPT_TCP_KEEPCNT' => 'curl/curl_d.php',
'CURLOPT_TCP_KEEPIDLE' => 'curl/curl_d.php',
'CURLOPT_TCP_KEEPINTVL' => 'curl/curl_d.php',
'CURLOPT_TCP_NODELAY' => 'curl/curl_d.php',
@@ -10428,6 +10429,7 @@ final class PhpStormStubsMap
'MYSQLI_TYPE_TINY' => 'mysqli/mysqli.php',
'MYSQLI_TYPE_TINY_BLOB' => 'mysqli/mysqli.php',
'MYSQLI_TYPE_VAR_STRING' => 'mysqli/mysqli.php',
+ 'MYSQLI_TYPE_VECTOR' => 'mysqli/mysqli.php',
'MYSQLI_TYPE_YEAR' => 'mysqli/mysqli.php',
'MYSQLI_UNIQUE_KEY_FLAG' => 'mysqli/mysqli.php',
'MYSQLI_UNSIGNED_FLAG' => 'mysqli/mysqli.php',
@@ -12155,6 +12157,7 @@ final class PhpStormStubsMap
'SORT_STRING' => 'standard/standard_defines.php',
'SO_ATTACH_REUSEPORT_CBPF' => 'sockets/sockets.php',
'SO_BINDTODEVICE' => 'sockets/sockets.php',
+ 'SO_BINDTOIFINDEX' => 'sockets/sockets.php',
'SO_BPF_EXTENSIONS' => 'sockets/sockets.php',
'SO_BROADCAST' => 'sockets/sockets.php',
'SO_DEBUG' => 'sockets/sockets.php',
@@ -13360,9 +13363,12 @@ final class PhpStormStubsMap
'T_POW_EQUAL' => 'tokenizer/tokenizer.php',
'T_PRINT' => 'tokenizer/tokenizer.php',
'T_PRIVATE' => 'tokenizer/tokenizer.php',
+ 'T_PRIVATE_SET' => 'tokenizer/tokenizer.php',
'T_PROPERTY_C' => 'tokenizer/tokenizer.php',
'T_PROTECTED' => 'tokenizer/tokenizer.php',
+ 'T_PROTECTED_SET' => 'tokenizer/tokenizer.php',
'T_PUBLIC' => 'tokenizer/tokenizer.php',
+ 'T_PUBLIC_SET' => 'tokenizer/tokenizer.php',
'T_READONLY' => 'tokenizer/tokenizer.php',
'T_REQUIRE' => 'tokenizer/tokenizer.php',
'T_REQUIRE_ONCE' => 'tokenizer/tokenizer.php',
diff --git a/Reflection/ReflectionProperty.php b/Reflection/ReflectionProperty.php
index c9c8ffe6c..4a0dbb48e 100644
--- a/Reflection/ReflectionProperty.php
+++ b/Reflection/ReflectionProperty.php
@@ -67,6 +67,16 @@ class ReflectionProperty implements Reflector
*/
public const IS_READONLY = 128;
+ /**
+ * @since 8.4
+ */
+ public const IS_PROTECTED_SET = 2048;
+
+ /**
+ * @since 8.4
+ */
+ public const IS_PRIVATE_SET = 4096;
+
/**
* Construct a ReflectionProperty object
*
@@ -385,4 +395,14 @@ public function getHooks(): array {}
* @since 8.4
*/
public function getHook(PropertyHookType $type): ?ReflectionMethod {}
+
+ /**
+ * @since 8.4
+ */
+ public function isPrivateSet(): bool {}
+
+ /**
+ * @since 8.4
+ */
+ public function isProtectedSet(): bool {}
}
diff --git a/curl/curl_d.php b/curl/curl_d.php
index 9185d583f..fd3bf97ea 100644
--- a/curl/curl_d.php
+++ b/curl/curl_d.php
@@ -4358,3 +4358,8 @@
* @since 8.4
*/
define('CURL_PREREQFUNC_ABORT', 1);
+
+/**
+ * @since 8.4
+ */
+define('CURLOPT_TCP_KEEPCNT', 326);
\ No newline at end of file
diff --git a/mysqli/mysqli.php b/mysqli/mysqli.php
index 16c60f2a2..b7559473e 100644
--- a/mysqli/mysqli.php
+++ b/mysqli/mysqli.php
@@ -3607,3 +3607,8 @@ function mysqli_set_opt(
* @since 8.1
*/
define('MYSQLI_IS_MARIADB', 0);
+
+/**
+ * @since 8.4
+ */
+define('MYSQLI_TYPE_VECTOR', 242);
\ No newline at end of file
diff --git a/sockets/sockets.php b/sockets/sockets.php
index 724c24680..15b660aae 100644
--- a/sockets/sockets.php
+++ b/sockets/sockets.php
@@ -2385,6 +2385,11 @@ function socket_atmark(Socket $socket): bool {}
* @since 8.4
*/
define('SOCK_NONBLOCK', 2048);
+
+/**
+ * @since 8.4
+ */
+define('SO_BINDTOIFINDEX', 62);
/**
* @since 8.0
*/
diff --git a/tests/DockerImages/8.4/Dockerfile b/tests/DockerImages/8.4/Dockerfile
index 730f71446..9f31c0840 100644
--- a/tests/DockerImages/8.4/Dockerfile
+++ b/tests/DockerImages/8.4/Dockerfile
@@ -1,4 +1,4 @@
-FROM php:8.4.0beta3-alpine
+FROM php:8.4.0beta4-alpine
RUN set -eux; \
apk add --repository http://dl-cdn.alpinelinux.org/alpine/edge/community --no-cache --virtual .build-deps \
diff --git a/tests/DockerImages/testRunner/Dockerfile b/tests/DockerImages/testRunner/Dockerfile
index 20083590f..00247cb22 100644
--- a/tests/DockerImages/testRunner/Dockerfile
+++ b/tests/DockerImages/testRunner/Dockerfile
@@ -1,4 +1,4 @@
-FROM php:8.4.0beta3-alpine
+FROM php:8.4.0beta4-alpine
RUN echo 'memory_limit = 2048M' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
COPY --from=composer /usr/bin/composer /usr/bin/composer
diff --git a/tokenizer/tokenizer.php b/tokenizer/tokenizer.php
index c5a820964..6f15addaf 100644
--- a/tokenizer/tokenizer.php
+++ b/tokenizer/tokenizer.php
@@ -236,3 +236,18 @@ function token_name(int $id): string {}
* @removed 7.0
*/
define('T_CHARACTER', 315);
+
+/**
+ * @since 8.4
+ */
+define('T_PRIVATE_SET', 327);
+
+/**
+ * @since 8.4
+ */
+define('T_PROTECTED_SET', 328);
+
+/**
+ * @since 8.4
+ */
+define('T_PUBLIC_SET', 329);