Commit c383b8cae02 for php.net

commit c383b8cae02338f32d2fa460f003223003df1acb
Author: NickSdot <32384907+NickSdot@users.noreply.github.com>
Date:   Tue Aug 11 03:03:40 2026 +0700

    core: Deprecate using `namespace` as class constant name (#22964)

    RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_using_namespace_as_a_class_constant_name

diff --git a/NEWS b/NEWS
index 4ed01591ea4..23f9fad2e3f 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ PHP                                                                        NEWS
     operation depth. (iliaal)

 - Core:
+  . Deprecated "namespace" as a class constant name. (NickSdot)
   . Changed run-tests.php to run in parallel by default, using up to 10
     automatically detected workers. Pass -j1 for sequential execution.
     (NickSdot)
diff --git a/UPGRADING b/UPGRADING
index 754157e75b2..424e4189057 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -441,6 +441,7 @@ PHP 8.6 UPGRADE NOTES
 ========================================

 - Core:
+  . Using "namespace" as a class constant name is deprecated.
   . Specifying a return type of array|null / ?array for __debugInfo() is now
     deprecated. Specify array instead.
   . Returning values from __construct() and __destruct() is now deprecated.
diff --git a/Zend/tests/deprecate_namespace_class_constant.phpt b/Zend/tests/deprecate_namespace_class_constant.phpt
new file mode 100644
index 00000000000..c44ebbc258d
--- /dev/null
+++ b/Zend/tests/deprecate_namespace_class_constant.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Using "namespace" as a class constant name is deprecated
+--FILE--
+<?php
+
+define('namespace', 'global constant value');
+
+class Foo {
+    const NAMESPACE = 'class constant value';
+}
+
+interface Bar {
+    const Namespace = 'interface constant value';
+}
+
+enum Baz {
+    const nAmEsPaCe = 'enum constant value';
+}
+
+trait YooTrait {
+    const namespace = 'trait constant value';
+}
+
+class Sup {
+    use YooTrait;
+}
+
+enum Yoo: string {
+    case namespace = 'enum case value';
+}
+
+class Can {
+    public static $namespace = 'property value';
+
+    public static function namespace() {
+        return 'method value';
+    }
+}
+
+echo Foo::NAMESPACE, PHP_EOL;
+echo Bar::Namespace, PHP_EOL;
+echo Baz::nAmEsPaCe, PHP_EOL;
+echo Yoo::namespace->value, PHP_EOL;
+echo Sup::namespace, PHP_EOL;
+echo Can::$namespace, PHP_EOL;
+echo Can::namespace(), PHP_EOL;
+echo constant('namespace'), PHP_EOL;
+
+?>
+--EXPECTF--
+Deprecated: Declaring class constant called 'namespace' is deprecated in %s on line %d
+
+Deprecated: Declaring interface constant called 'namespace' is deprecated in %s on line %d
+
+Deprecated: Declaring enum constant called 'namespace' is deprecated in %s on line %d
+
+Deprecated: Declaring trait constant called 'namespace' is deprecated in %s on line %d
+
+Deprecated: Declaring enum constant called 'namespace' is deprecated in %s on line %d
+class constant value
+interface constant value
+enum constant value
+enum case value
+trait constant value
+property value
+method value
+global constant value
diff --git a/Zend/tests/grammar/semi_reserved_005.phpt b/Zend/tests/grammar/semi_reserved_005.phpt
index 4a9a19e1181..06c428eacbc 100644
--- a/Zend/tests/grammar/semi_reserved_005.phpt
+++ b/Zend/tests/grammar/semi_reserved_005.phpt
@@ -160,7 +160,8 @@ class Obj

 echo "\nDone\n";
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Declaring class constant called 'namespace' is deprecated in %s on line %d
 empty
 callable
 trait
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index d7ed141a3e1..e47c489dcee 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -4821,6 +4821,9 @@ ZEND_API zend_class_constant *zend_declare_typed_class_constant(zend_class_entry
 	if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_CLASS))) {
 		zend_error_noreturn(ce->type == ZEND_INTERNAL_CLASS ? E_CORE_ERROR : E_COMPILE_ERROR,
 				"A class constant must not be called 'class'; it is reserved for class name fetching");
+	} else if (zend_string_equals_literal_ci(name, "namespace")) {
+		zend_error(E_DEPRECATED, "Declaring %s constant called 'namespace' is deprecated",
+			zend_get_object_type(ce));
 	}

 	if (Z_TYPE_P(value) == IS_STRING && !ZSTR_IS_INTERNED(Z_STR_P(value))) {