diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-07-11 13:35:44 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-07-22 11:39:52 +0200 |
commit | 0ba7c3eadf2683e4581079ea04b5b3019a5b6cce (patch) | |
tree | e106f17dfaa2216367cd77cad17d08574f01af6d | |
parent | b2ea507beab862a0167af6b99f44fe9c695ca4f0 (diff) | |
download | php-git-0ba7c3eadf2683e4581079ea04b5b3019a5b6cce.tar.gz |
Deprecate array_key_exists() on objects
-rw-r--r-- | Zend/zend_execute.c | 4 | ||||
-rw-r--r-- | ext/spl/tests/bug61347.phpt | 4 | ||||
-rw-r--r-- | ext/standard/array.c | 3 | ||||
-rw-r--r-- | ext/standard/tests/array/array_key_exists.phpt | 12 | ||||
-rw-r--r-- | ext/standard/tests/array/array_key_exists_object1.phpt | 8 | ||||
-rw-r--r-- | ext/standard/tests/array/array_key_exists_object2.phpt | 10 |
6 files changed, 38 insertions, 3 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 39e7cf42d1..0ec2b0d286 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -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); diff --git a/ext/spl/tests/bug61347.phpt b/ext/spl/tests/bug61347.phpt index f893b24527..410d65b7e9 100644 --- a/ext/spl/tests/bug61347.phpt +++ b/ext/spl/tests/bug61347.phpt @@ -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) diff --git a/ext/standard/array.c b/ext/standard/array.c index f5582baf33..73b3d35a08 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -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)) { diff --git a/ext/standard/tests/array/array_key_exists.phpt b/ext/standard/tests/array/array_key_exists.phpt index 61faf0158d..78a144f829 100644 --- a/ext/standard/tests/array/array_key_exists.phpt +++ b/ext/standard/tests/array/array_key_exists.phpt @@ -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 diff --git a/ext/standard/tests/array/array_key_exists_object1.phpt b/ext/standard/tests/array/array_key_exists_object1.phpt index 14453cd934..5386bd624c 100644 --- a/ext/standard/tests/array/array_key_exists_object1.phpt +++ b/ext/standard/tests/array/array_key_exists_object1.phpt @@ -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) { diff --git a/ext/standard/tests/array/array_key_exists_object2.phpt b/ext/standard/tests/array/array_key_exists_object2.phpt index c9c1633591..b550f71a79 100644 --- a/ext/standard/tests/array/array_key_exists_object2.phpt +++ b/ext/standard/tests/array/array_key_exists_object2.phpt @@ -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) { |