Ver Fonte

Test ArrayAccess prototype method overwriting

If the PHP object implementing ArrayAccess has a method,
that has the same name as one of the Array.prototype methods,
the PHP method shall be called, i.e. overwrite the JS method.
Stefan Siegl há 10 anos atrás
pai
commit
5a11ef2468
1 ficheiros alterados com 21 adições e 0 exclusões
  1. 21 0
      tests/array_access_003.phpt

+ 21 - 0
tests/array_access_003.phpt

@@ -36,6 +36,11 @@ class MyArray implements ArrayAccess, Countable {
 	echo "push << $value\n";
 	$this->data[] = $value;
     }
+
+    public function push($value) {
+	echo "php-side-push << $value\n";
+	$this->data[] = $value;
+    }
 }
 
 $v8 = new V8Js();
@@ -50,6 +55,16 @@ var_dump($v8->myarr[3]);
 /* And JS should see the changes due to live binding. */
 $v8->executeString('var_dump(PHP.myarr.join(","));');
 
+
+/* Call `push' method, this should trigger the PHP method. */
+$v8->executeString('PHP.myarr.push(42);');
+
+var_dump(count($v8->myarr));
+var_dump($v8->myarr[4]);
+
+/* And JS should see the changes due to live binding. */
+$v8->executeString('var_dump(PHP.myarr.join(","));');
+
 ?>
 ===EOF===
 --EXPECT--
@@ -59,4 +74,10 @@ int(4)
 int(23)
 count() = 4
 string(16) "one,two,three,23"
+php-side-push << 42
+count() = 5
+int(5)
+int(42)
+count() = 5
+string(19) "one,two,three,23,42"
 ===EOF===