@ 2014-03-27T18:05:55Z <?php
class Instantiator
{
public $dependencies = [];
public function instantiate($type)
{
return $this->instantiateInternal($type, []);
}
private function instantiateInternal($type, array $stack)
{
if (in_array($type, $stack))
{
throw new Exception(vsprintf('Cycle detected for `%s` as %s', [
$type,
print_r($stack, true),
]));
}
$stack[] = $type;
$graph = [];
if (isset($this->dependencies[$type]))
{
foreach ($this->dependencies[$type] as $dependentType)
{
$graph[$dependentType] = $this->instantiateInternal($dependentType, $stack);
}
}
return $graph;
}
}
$i1 = new Instantiator();
$i1->dependencies = [
'A' => ['B', 'C'],
'B' => ['D'],
'C' => ['D'],
'D' => ['E'],
];
var_dump($i1->instantiate('A'));
$i2 = new Instantiator();
$i2->dependencies = [
'A' => ['B', 'C'],
'B' => ['D'],
'C' => ['D'],
'D' => ['A'],
];
var_dump($i2->instantiate('A'));
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.25 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.7 array(2) {
["B"]=>
array(1) {
["D"]=>
array(1) {
["E"]=>
array(0) {
}
}
}
["C"]=>
array(1) {
["D"]=>
array(1) {
["E"]=>
array(0) {
}
}
}
}
Fatal error: Uncaught Exception: Cycle detected for `A` as Array
(
[0] => A
[1] => B
[2] => D
)
in /in/tGMQQ:17
Stack trace:
#0 /in/tGMQQ(28): Instantiator->instantiateInternal('A', Array)
#1 /in/tGMQQ(28): Instantiator->instantiateInternal('D', Array)
#2 /in/tGMQQ(28): Instantiator->instantiateInternal('B', Array)
#3 /in/tGMQQ(10): Instantiator->instantiateInternal('A', Array)
#4 /in/tGMQQ(55): Instantiator->instantiate('A')
#5 {main}
thrown in /in/tGMQQ on line 17
Process exited with code 255 . Output for 5.4.0 - 5.4.45 , 5.5.24 - 5.5.35 , 5.6.8 - 5.6.28 array(2) {
["B"]=>
array(1) {
["D"]=>
array(1) {
["E"]=>
array(0) {
}
}
}
["C"]=>
array(1) {
["D"]=>
array(1) {
["E"]=>
array(0) {
}
}
}
}
Fatal error: Uncaught exception 'Exception' with message 'Cycle detected for `A` as Array
(
[0] => A
[1] => B
[2] => D
)
' in /in/tGMQQ:17
Stack trace:
#0 /in/tGMQQ(28): Instantiator->instantiateInternal('A', Array)
#1 /in/tGMQQ(28): Instantiator->instantiateInternal('D', Array)
#2 /in/tGMQQ(28): Instantiator->instantiateInternal('B', Array)
#3 /in/tGMQQ(10): Instantiator->instantiateInternal('A', Array)
#4 /in/tGMQQ(55): Instantiator->instantiate('A')
#5 {main}
thrown in /in/tGMQQ on line 17
Process exited with code 255 . Output for 5.1.0 - 5.1.6 , 5.2.0 - 5.2.17 , 5.3.0 - 5.3.29 Parse error: syntax error, unexpected '[' in /in/tGMQQ on line 6
Process exited with code 255 . Output for 5.0.0 - 5.0.5 Parse error: parse error, unexpected '[' in /in/tGMQQ on line 6
Process exited with code 255 . Output for 4.4.2 - 4.4.9 Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/tGMQQ on line 6
Process exited with code 255 . Output for 4.3.0 - 4.3.1 , 4.3.5 - 4.3.11 , 4.4.0 - 4.4.1 Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/tGMQQ on line 6
Process exited with code 255 . Output for 4.3.2 - 4.3.4 Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/tGMQQ on line 6
Process exited with code 255 . preferences:dark mode live preview
246.36 ms | 401 KiB | 329 Q