diff --git a/src/bindings/php/Tests/AndTest.php b/src/bindings/php/Tests/AndTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..03f92582040b5f02fd3b5898b31801c8c49dec16
--- /dev/null
+++ b/src/bindings/php/Tests/AndTest.php
@@ -0,0 +1,35 @@
+<?php
+include_once 'hammer.php';
+
+class AndTest extends PHPUnit_Framework_TestCase
+{
+    protected $parser1;
+    protected $parser2;
+    protected $parser3;
+
+    protected function setUp()
+    {
+        $this->parser1 = sequence(h_and(ch("0")), ch("0"));
+        $this->parser2 = sequence(h_and(ch("0")), ch("1"));
+        $this->parser3 = sequence(ch("1"), h_and(ch("2")));
+    }
+
+    public function testSuccess1()
+    {
+        $result = h_parse($this->parser1, "0");
+        $this->assertEquals(array("0"), $result);
+    }
+
+    public function testFailure2()
+    {
+        $result = h_parse($this->parser2, "0");
+        $this->assertEquals(NULL, $result);
+    }
+
+    public function testSuccess3()
+    {
+        $result = h_parse($this->parser3, "12");
+        $this->assertEquals(array("1"), $result);
+    }
+}
+?>
\ No newline at end of file
diff --git a/src/bindings/php/Tests/EpsilonPTest.php b/src/bindings/php/Tests/EpsilonPTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..432afef4b3c1472c49fb7fca7c6f68df3fe51f27
--- /dev/null
+++ b/src/bindings/php/Tests/EpsilonPTest.php
@@ -0,0 +1,35 @@
+<?php
+include_once 'hammer.php';
+
+class EpsilonPTest extends PHPUnit_Framework_TestCase
+{
+    protected $parser1;
+    protected $parser2;
+    protected $parser3;
+
+    protected function setUp()
+    {
+        $this->parser1 = sequence(ch("a"), h_epsilon_p(), ch("b"));
+        $this->parser2 = sequence(h_epsilon_p(), ch("a"));
+        $this->parser3 = sequence(ch("a"), h_epsilon_p());
+    }
+
+    public function testSuccess1()
+    {
+        $result = h_parse($this->parser1, "ab");
+        $this->assertEquals(array("a", "b"), $result);
+    }
+
+    public function testSuccess2()
+    {
+        $result = h_parse($this->parser2, "a");
+        $this->assertEquals(array("a"), $result);
+    }
+
+    public function testSuccess3()
+    {
+        $result = h_parse($this->parser3, "ab");
+        $this->assertEquals(array("a"), $result);
+    }
+}
+?>
\ No newline at end of file
diff --git a/src/bindings/php/Tests/LeftrecTest.php b/src/bindings/php/Tests/LeftrecTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a2878e1df830d562efaf625fb5df63149ff74b0
--- /dev/null
+++ b/src/bindings/php/Tests/LeftrecTest.php
@@ -0,0 +1,24 @@
+<?php
+include_once 'hammer.php';
+
+class LeftrecTest extends PHPUnit_Framework_TestCase
+{
+    protected $parser;
+
+    protected function setUp()
+    {
+        $this->parser = h_indirect();
+        h_bind_indirect($this->parser, choice(sequence($this->parser, ch("a")), ch("a")));
+    }
+
+    public function testSuccess()
+    {
+        $result1 = h_parse($this->parser, "a");
+        $result2 = h_parse($this->parser, "aa");
+        $result3 = h_parse($this->parser, "aaa");
+        $this->assertEquals("a", $result1);
+        $this->assertEquals(array("a", "a"), $result);
+        $this->assertEquals(array(array("a", "a"), "a"), $result);
+    }
+}
+?>
\ No newline at end of file
diff --git a/src/bindings/php/Tests/NotTest.php b/src/bindings/php/Tests/NotTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a2c76aa7eb6ea6a482d2c42df3d964fefa2475ca
--- /dev/null
+++ b/src/bindings/php/Tests/NotTest.php
@@ -0,0 +1,35 @@
+<?php
+include_once 'hammer.php';
+
+class NotTest extends PHPUnit_Framework_TestCase
+{
+    protected $parser1;
+    protected $parser2;
+
+    protected function setUp()
+    {
+        $this->parser1 = sequence(ch("a"), choice(ch("+"), h_token("++")), ch("b"));
+        $this->parser2 = sequence(ch("a"), choice(sequence(ch("+"), h_not(ch("+"))), h_token("++")), ch("b"));
+    }
+
+    public function testSuccess1()
+    {
+        $result = h_parse($this->parser1, "a+b");
+        $this->assertEquals(array("a", "+", "b"), $result);
+    }
+
+    public function testFailure1()
+    {
+        $result = h_parse($this->parser1, "a++b");
+        $this->assertEquals(NULL, $result);
+    }
+
+    public function testSuccess2()
+    {
+        $result1 = h_parse($this->parser2, "a+b");
+        $result2 = h_parse($this->parser2, "a++b");
+        $this->assertEquals(array("a", array("+"), "b"), $result1);
+        $this->assertEquals(array("a", "++", "b"), $result2);
+    }
+}
+?>
\ No newline at end of file