}
/* }}} */
-/* {{{ proto int|null extract(array var_array [, int extract_type [, string prefix]])
+/* {{{ proto int extract(array var_array [, int extract_type [, string prefix]])
Imports variables into symbol table from an array */
PHP_FUNCTION(extract)
{
extract_type &= 0xff;
if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_IF_EXISTS) {
- php_error_docref(NULL, E_WARNING, "Invalid extract type");
+ zend_throw_error(NULL, "Invalid extract type");
return;
}
if (extract_type > EXTR_SKIP && extract_type <= EXTR_PREFIX_IF_EXISTS && ZEND_NUM_ARGS() < 3) {
- php_error_docref(NULL, E_WARNING, "specified extract type requires the prefix parameter");
+ zend_throw_error(NULL, "Specified extract type requires the prefix parameter");
return;
}
if (prefix) {
if (ZSTR_LEN(prefix) && !php_valid_var_name(ZSTR_VAL(prefix), ZSTR_LEN(prefix))) {
- php_error_docref(NULL, E_WARNING, "prefix is not a valid identifier");
+ zend_throw_error(NULL, "Prefix is not a valid identifier");
return;
}
}
function array_search($needle, array $haystack, bool $strict = false) {}
/** @prefer-ref $arg */
-function extract(array &$arg, int $extract_type = EXTR_OVERWRITE, string $prefix = ""): ?int {}
+function extract(array &$arg, int $extract_type = EXTR_OVERWRITE, string $prefix = ""): int {}
function compact($var_name, ...$var_names): array {}
ZEND_ARG_TYPE_INFO(0, strict, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, arg, IS_ARRAY, 0)
ZEND_ARG_TYPE_INFO(0, extract_type, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
/* Invalid second argument ( only 0-6 is valid) */
$arr = array(1);
-var_dump( extract($arr, -1 . "wddr") );
-var_dump( extract($arr, 7 , "wddr") );
+
+try {
+ var_dump( extract($arr, -1 . "wddr") );
+} catch (\Error $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump( extract($arr, 7 , "wddr") );
+} catch (\Error $e) {
+ echo $e->getMessage() . "\n";
+}
/* Two Arguments, second as prefix but without prefix string as third argument */
-var_dump( extract($arr,EXTR_PREFIX_IF_EXISTS) );
+try {
+ var_dump( extract($arr,EXTR_PREFIX_IF_EXISTS) );
+} catch (\Error $e) {
+ echo $e->getMessage() . "\n";
+}
echo "Done\n";
?>
*** Testing Error Conditions ***
Notice: A non well formed numeric value encountered in %s on line %d
-
-Warning: extract(): Invalid extract type in %s on line %d
-NULL
-
-Warning: extract(): Invalid extract type in %s on line %d
-NULL
-
-Warning: extract(): specified extract type requires the prefix parameter in %s on line %d
-NULL
+Invalid extract type
+Invalid extract type
+Specified extract type requires the prefix parameter
Done
--- /dev/null
+--TEST--
+Test extract() function - error condition - Invalid prefix.
+--FILE--
+<?php
+$a = ["1" => "one", "2" => "two", "3" => "three", "4" => "four", "5" => "five"];
+
+try {
+ extract($a, EXTR_PREFIX_ALL, '85bogus');
+} catch (\Error $e) {
+ echo $e->getMessage();
+}
+?>
+--EXPECT--
+Prefix is not a valid identifier