diff --git a/lib/php/lib/Base/TBase.php b/lib/php/lib/Base/TBase.php
index c61b631..d946665 100644
--- a/lib/php/lib/Base/TBase.php
+++ b/lib/php/lib/Base/TBase.php
@@ -31,6 +31,7 @@
  * of PHP. Note that code is intentionally duplicated in here to avoid making
  * function calls for every field or member of a container..
  */
+#[\AllowDynamicProperties]
 abstract class TBase
 {
     public static $tmethod = array(
diff --git a/lib/php/lib/Exception/TException.php b/lib/php/lib/Exception/TException.php
index 228d761..168688c 100644
--- a/lib/php/lib/Exception/TException.php
+++ b/lib/php/lib/Exception/TException.php
@@ -38,6 +38,7 @@
  * @param mixed $p1 Message (string) or type-spec (array)
  * @param mixed $p2 Code (integer) or values (array)
  */
+#[\AllowDynamicProperties]
 class TException extends \Exception
 {
     public function __construct($p1 = null, $p2 = 0)
diff --git a/lib/php/src/Thrift.php b/lib/php/src/Thrift.php
index 0364c90..1dbf64b 100644
--- a/lib/php/src/Thrift.php
+++ b/lib/php/src/Thrift.php
@@ -68,6 +68,7 @@
  * @param mixed $p1 Message (string) or type-spec (array)
  * @param mixed $p2 Code (integer) or values (array)
  */
+#[\AllowDynamicProperties]
 class TException extends Exception
 {
   public function __construct($p1=null, $p2=0)
@@ -419,6 +420,7 @@
  * of PHP. Note that code is intentionally duplicated in here to avoid making
  * function calls for every field or member of a container..
  */
+#[\AllowDynamicProperties]
 abstract class TBase
 {
   static $tmethod = array(TType::BOOL   => 'Bool',
diff --git a/lib/php/test/Unit/Lib/Exception/TExceptionTest.php b/lib/php/test/Unit/Lib/Exception/TExceptionTest.php
new file mode 100644
index 0000000..add8803
--- /dev/null
+++ b/lib/php/test/Unit/Lib/Exception/TExceptionTest.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+namespace Test\Thrift\Unit\Lib\Exception;
+
+use PHPUnit\Framework\TestCase;
+use Thrift\Exception\TException;
+
+class TExceptionTest extends TestCase
+{
+    public function testExceptionWithMessageAndCode()
+    {
+        $message = 'Test exception message';
+        $code = 42;
+
+        $exception = new TException($message, $code);
+
+        $this->assertInstanceOf(TException::class, $exception);
+        $this->assertSame($message, $exception->getMessage());
+        $this->assertSame($code, $exception->getCode());
+    }
+
+    public function testExceptionWithSpecAndVals()
+    {
+        $spec = [
+            ['var' => 'string'],
+            ['var' => 'int'],
+            ['var' => 'bool'],
+        ];
+
+        $vals = [
+            'string' => 'Test value',
+            'int' => 123456,
+            'bool' => true,
+        ];
+        $exception = new TException($spec, $vals);
+
+        $this->assertEquals('Test value', $exception->string);
+        $this->assertEquals(123456, $exception->int);
+        $this->assertEquals(true, $exception->bool);
+    }
+}
