3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Traverse\Test { interface MyTypeInterface { function getPropertyA(); function getPropertyB(); } class MyType implements MyTypeInterface { private $_propertyA; private $_propertyB; final public function getPropertyA() { return $this->_propertyA; } final public function getPropertyB() { return $this->_propertyB; } final private function setPropertyA($propertyA) { // $propertyA assertions $this->_propertyA = $propertyA; } final private function setPropertyB($propertyB) { // $propertyB assertions $this->_propertyB = $propertyB; } public function __construct(MyTypeInterface $myType) { $this->setPropertyA($myType->getPropertyA()); $this->setPropertyB($myType->getPropertyB()); } } class MyTypeBuilder implements MyTypeInterface { private $_propertyA; private $_propertyB; public function getPropertyA() { return $this->_propertyA; } public function setPropertyA($propertyA) { $this->_propertyA = $propertyA; } public function getPropertyB() { return $this->_propertyB; } public function setPropertyB($propertyB) { $this->_propertyB = $propertyB; } } $myTypeBuilder = new MyTypeBuilder(); $myTypeBuilder->setPropertyA('foo'); $myTypeBuilder->setPropertyB('bar'); $myType = new MyType($myTypeBuilder); var_dump($myTypeBuilder, $myType); /* object(Traverse\Test\MyTypeBuilder)#1 (2) { ["_propertyA":"Traverse\Test\MyTypeBuilder":private]=> string(3) "foo" ["_propertyB":"Traverse\Test\MyTypeBuilder":private]=> string(3) "bar" } object(Traverse\Test\MyType)#2 (2) { ["_propertyA":"Traverse\Test\MyType":private]=> string(3) "foo" ["_propertyB":"Traverse\Test\MyType":private]=> string(3) "bar" } */ }

preferences:
41.76 ms | 402 KiB | 5 Q