]> granicus.if.org Git - php/commitdiff
Deprecate array_key_exists() on objects
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 11 Jul 2019 11:35:44 +0000 (13:35 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 22 Jul 2019 09:39:52 +0000 (11:39 +0200)
Zend/zend_execute.c
ext/spl/tests/bug61347.phpt
ext/standard/array.c
ext/standard/tests/array/array_key_exists.phpt
ext/standard/tests/array/array_key_exists_object1.phpt
ext/standard/tests/array/array_key_exists_object2.phpt

index 39e7cf42d1f4d376c90d13565060ac82d303a852..0ec2b0d2866cb1961c6b38d09c72ea6d391c3bc8 100644 (file)
@@ -2586,6 +2586,10 @@ num_key:
 static zend_never_inline uint32_t ZEND_FASTCALL zend_array_key_exists_slow(zval *subject, zval *key OPLINE_DC EXECUTE_DATA_DC)
 {
        if (EXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
+               zend_error(E_DEPRECATED, "array_key_exists(): "
+                       "Using array_key_exists() on objects is deprecated. "
+                       "Use isset() or property_exists() instead");
+
                HashTable *ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
                uint32_t result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
                zend_release_properties(ht);
index f893b2452770f82bd3e57e3c51d317696095e4bb..410d65b7e9843bbede117dd06e47006371f97485 100644 (file)
@@ -22,13 +22,15 @@ var_dump(isset($b[37])); //true
 var_dump(isset($b['no_exists'])); //false
 var_dump(empty($b['b'])); //true
 var_dump(empty($b[37])); //true
---EXPECT--
+--EXPECTF--
 bool(false)
 bool(false)
 bool(false)
 bool(false)
 bool(true)
 bool(true)
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
 NULL
 bool(true)
index f5582baf33be9d23cb7f9ebd170e261088340fcb..73b3d35a08132758f5638a6895cbd69772184154 100644 (file)
@@ -6330,6 +6330,9 @@ PHP_FUNCTION(array_key_exists)
                ht = Z_ARRVAL_P(array);
        } else {
                ht = zend_get_properties_for(array, ZEND_PROP_PURPOSE_ARRAY_CAST);
+               php_error_docref(NULL, E_DEPRECATED,
+                       "Using array_key_exists() on objects is deprecated. "
+                       "Use isset() or property_exists() instead");
        }
 
        switch (Z_TYPE_P(key)) {
index 61faf0158ddcfd1ca1f4b8015730bba6704ef84e..78a144f8294b474f13d9eda86dbc70b9d248f86a 100644 (file)
@@ -280,13 +280,25 @@ Warning: array_key_exists(): The first argument should be either a string or an
 bool(false)
 
 *** Testing operation on objects ***
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(false)
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(false)
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(false)
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
 bool(true)
 
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
+
 Warning: array_key_exists(): The first argument should be either a string or an integer in %s on line %d
 bool(false)
 Done
index 14453cd9340ff5bb720e9a65f7146fbcef12065a..5386bd624c188e3134991a7f0d3b1e23285a479f 100644 (file)
@@ -46,13 +46,17 @@ var_dump($class2);
 
 echo "Done";
 ?>
---EXPECT--
+--EXPECTF--
 *** Testing array_key_exists() : object functionality ***
 
 -- Do not assign a value to $class1->var3 --
 $key = var1:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
 $key = var3:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
 $class1:
 object(myClass)#1 (3) {
@@ -66,6 +70,8 @@ object(myClass)#1 (3) {
 
 -- Assign a value to $class2->var3 --
 $key = var3:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
 $class2:
 object(myClass)#2 (3) {
index c9c163359199934c790aef21cb423a0ee75e457e..b550f71a79919cc5e7c4e47b9ce16efb65d12a7e 100644 (file)
@@ -48,15 +48,21 @@ var_dump($class2);
 
 echo "Done";
 ?>
---EXPECT--
+--EXPECTF--
 *** Testing array_key_exists() : object functionality ***
 
 -- Do not assign a value to $class1->var3 --
 $key = var1:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(true)
 $key = var2:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(false)
 $key = var3:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(false)
 $class1:
 object(myClass)#1 (3) {
@@ -70,6 +76,8 @@ object(myClass)#1 (3) {
 
 -- Assign a value to $class2->var3 --
 $key = var3:
+
+Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
 bool(false)
 $class2:
 object(myClass)#2 (3) {