summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-07-11 13:35:44 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-07-22 11:39:52 +0200
commit0ba7c3eadf2683e4581079ea04b5b3019a5b6cce (patch)
treee106f17dfaa2216367cd77cad17d08574f01af6d
parentb2ea507beab862a0167af6b99f44fe9c695ca4f0 (diff)
downloadphp-git-0ba7c3eadf2683e4581079ea04b5b3019a5b6cce.tar.gz
Deprecate array_key_exists() on objects
-rw-r--r--Zend/zend_execute.c4
-rw-r--r--ext/spl/tests/bug61347.phpt4
-rw-r--r--ext/standard/array.c3
-rw-r--r--ext/standard/tests/array/array_key_exists.phpt12
-rw-r--r--ext/standard/tests/array/array_key_exists_object1.phpt8
-rw-r--r--ext/standard/tests/array/array_key_exists_object2.phpt10
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) {