3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * @author @ct-jensschulze <jens.schulze@commercetools.de> */ class PHPUnit_Framework_MockObject_Invocation_Object extends PHPUnit_Framework_MockObject_Invocation_Static { /** * @var object */ public $object; /** * @param string $className * @param string $methodname * @param array $parameters * @param object $object * @param object $cloneObjects */ public function __construct($className, $methodName, array $parameters, $object, $cloneObjects = false) { parent::__construct($className, $methodName, $parameters, $cloneObjects); $this->object = $object; } } class PHPUnit_Framework_MockObject_Invocation_Static { /** * @var array */ protected static $uncloneableExtensions = array( 'mysqli' => true, 'SQLite' => true, 'sqlite3' => true, 'tidy' => true, 'xmlwriter' => true, 'xsl' => true ); /** * @var array */ protected static $uncloneableClasses = array( 'Closure', 'COMPersistHelper', 'IteratorIterator', 'RecursiveIteratorIterator', 'SplFileObject', 'PDORow', 'ZipArchive' ); /** * @var string */ public $className; /** * @var string */ public $methodName; /** * @var array */ public $parameters; /** * @param string $className * @param string $methodname * @param array $parameters * @param boolean $cloneObjects */ public function __construct($className, $methodName, array $parameters, $cloneObjects = false) { $this->className = $className; $this->methodName = $methodName; $this->parameters = $parameters; if (!$cloneObjects) { return; } foreach ($this->parameters as $key => $value) { if (is_object($value)) { $this->parameters[$key] = $this->cloneObject($value); } } } /** * @param object $original * @return object */ protected function cloneObject($original) { return clone $original; } } interface MyInterface { public function doSomethingDifferent(); } abstract class MyClass implements MyInterface { public function doSomething() { return "doneSomething"; } abstract public function doSomethingElse(); } class MyClassTest { public function getMockForAbstractClass($className) { $mockClassName = 'Mock_' . $className; $class = <<<EOF class $mockClassName extends $className { private \$__phpunit_invocationMocker; private \$__phpunit_originalObject; public function __clone() { \$this->__phpunit_invocationMocker = clone \$this->__phpunit_getInvocationMocker(); } public function doSomethingElse() {} public function doSomethingDifferent() { \$arguments = array(); \$count = func_num_args(); if (\$count > 0) { \$_arguments = func_get_args(); for (\$i = 0; \$i < \$count; \$i++) { \$arguments[] = \$_arguments[\$i]; } } \$result = \$this->__phpunit_getInvocationMocker()->invoke( new PHPUnit_Framework_MockObject_Invocation_Object( 'MyInterface', 'httpRequest', \$arguments, \$this, FALSE ) ); return \$result; } } EOF; eval($class); return new $mockClassName(); } public function testDoSomething() { $object = $this->getMockForAbstractClass('MyClass'); assert('"doneSomething" == "' . $object->doSomething() . '"'); } } $test = new MyClassTest(); $test->testDoSomething();
Output for git.master, git.master_jit, rfc.property-hooks

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
58.83 ms | 401 KiB | 8 Q