summaryrefslogtreecommitdiff
path: root/ext/standard/tests/array/bug77135.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/tests/array/bug77135.phpt')
-rw-r--r--ext/standard/tests/array/bug77135.phpt99
1 files changed, 99 insertions, 0 deletions
diff --git a/ext/standard/tests/array/bug77135.phpt b/ext/standard/tests/array/bug77135.phpt
new file mode 100644
index 0000000000..0b23d62766
--- /dev/null
+++ b/ext/standard/tests/array/bug77135.phpt
@@ -0,0 +1,99 @@
+--TEST--
+Test extract() with $this
+--FILE--
+<?php
+
+class Extract
+{
+ public function run(): void
+ {
+ $options = [
+ 'EXTR_OVERWRITE' => EXTR_OVERWRITE,
+ 'EXTR_SKIP' => EXTR_SKIP,
+ 'EXTR_PREFIX_SAME' => EXTR_PREFIX_SAME,
+ 'EXTR_PREFIX_ALL' => EXTR_PREFIX_ALL,
+ 'EXTR_PREFIX_INVALID' => EXTR_PREFIX_INVALID,
+ 'EXTR_IF_EXISTS' => EXTR_IF_EXISTS,
+ 'EXTR_PREFIX_IF_EXISTS' => EXTR_PREFIX_IF_EXISTS,
+ ];
+
+ foreach ($options as $name => $flags) {
+ echo "{$name}\n";
+
+ $this->handle($name, $flags);
+ $this->handle("{$name}_REFS", $flags | EXTR_REFS);
+ echo "\n";
+ }
+ }
+
+ private function handle(string $name, int $flags): void
+ {
+ $array = ["this" => "value"];
+
+ try {
+ $result = extract($array, $flags, "x");
+ echo " extract() = {$result}\n";
+
+ echo " \$this = " . get_class($this) . "\n";
+ echo " \$v_this = " . (isset($x_this) ? $x_this : "NULL") . "\n";
+ } catch (\Throwable $e) {
+ echo " Exception: " . $e->getMessage() . "\n";
+ }
+ }
+}
+
+(new Extract)->run();
+
+?>
+--EXPECT--
+EXTR_OVERWRITE
+ Exception: Cannot re-assign $this
+ Exception: Cannot re-assign $this
+
+EXTR_SKIP
+ extract() = 0
+ $this = Extract
+ $v_this = NULL
+ extract() = 0
+ $this = Extract
+ $v_this = NULL
+
+EXTR_PREFIX_SAME
+ extract() = 1
+ $this = Extract
+ $v_this = value
+ extract() = 1
+ $this = Extract
+ $v_this = value
+
+EXTR_PREFIX_ALL
+ extract() = 1
+ $this = Extract
+ $v_this = value
+ extract() = 1
+ $this = Extract
+ $v_this = value
+
+EXTR_PREFIX_INVALID
+ extract() = 1
+ $this = Extract
+ $v_this = value
+ extract() = 1
+ $this = Extract
+ $v_this = value
+
+EXTR_IF_EXISTS
+ extract() = 0
+ $this = Extract
+ $v_this = NULL
+ extract() = 0
+ $this = Extract
+ $v_this = NULL
+
+EXTR_PREFIX_IF_EXISTS
+ extract() = 0
+ $this = Extract
+ $v_this = NULL
+ extract() = 0
+ $this = Extract
+ $v_this = NULL