<?php
class DepInj{
public $declarations = array ( ) ;
function declare ( $name , $class , $args = array ( ) ) { $this -> declarations [ $name ] = array ( 'class' => $class ,
'args' => $args
) ;
}
function getObj( $name ) {
$decl = $this -> declarations [ $name ] ;
foreach ( $decl [ 'args' ] as $a_kay => $arg_class_name ) {
$argsObjs [ ] = $this -> getObj ( $arg_class_name ) ;
}
$r = new ReflectionClass( $decl [ 'class' ] ) ;
$myInstance = $r -> newInstanceArgs ( argsObjs) ;
return $myInstance ;
}
}
class CheapGears{
public $price = 5 ;
}
class ExpensiveGears{
public $price = 20 ;
}
class Engine{
public $hp = 200 ;
public $gears = null ;
function __construct( $gears ) {
$this -> gears = $gears ;
}
}
class TurboEngine{
public $hp = 1200 ;
public $gears = null ;
function __construct( $gears ) {
$this -> gears = $gears ;
}
}
class Car{
public $engine = null ;
function __construct( $engine ) {
$this -> engine = $engine ;
}
}
$container = new DepInj( ) ;
$container -> declare ( 'normalGear' , CheapGears) ;
$container -> declare ( 'skupGear' , ExpensiveGears) ;
$container -> declare ( 'normalGearNormalEngine' , 'Engine' , array ( 'normalGear' ) ) ; $container -> declare ( 'skupGearNormalEngine' , 'Engine' , array ( 'skupGear' ) ) ;
$container -> declare ( 'skupEngine' , 'TurboEngine' , array ( 'skupGear' ) ) ;
$container -> declare ( 'evtinaKola' , 'Car' , array ( 'normalGearNormalEngine' ) ) ; $container -> declare ( 'evtinaKolaHubaviChasti' , 'Car' , array ( 'skupGearNormalEngine' ) ) ; $container -> declare ( 'skupaKola' , 'Car' , array ( 'skupEngine' ) ) ;
$e = $container -> getObj ( 'normalGearNormalEngine' ) ;
echo $e -> gears -> price ;
//$car = $container->getObj('skupaKola');
//$car = new Car(new TurboEngine(new Gears()));
//echo $car->engine->hp;
PD9waHAKCmNsYXNzIERlcEluansKCXB1YmxpYyAkZGVjbGFyYXRpb25zID0gYXJyYXkoKTsKCQoJZnVuY3Rpb24gZGVjbGFyZSgkbmFtZSwgJGNsYXNzLCAkYXJncz1hcnJheSgpKXsKCQkkdGhpcy0+ZGVjbGFyYXRpb25zWyRuYW1lXSA9IGFycmF5KAoJCQknY2xhc3MnID0+ICRjbGFzcywKCQkJJ2FyZ3MnPT4gJGFyZ3MKCQkpOwoJfQoJCglmdW5jdGlvbiBnZXRPYmooJG5hbWUpewoJCSRkZWNsID0gJHRoaXMtPmRlY2xhcmF0aW9uc1skbmFtZV07CgkJCgkJJGFyZ3NPYmpzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRkZWNsWydhcmdzJ10gYXMgJGFfa2F5PT4kYXJnX2NsYXNzX25hbWUpewoJCQkkYXJnc09ianNbXSA9ICR0aGlzLT5nZXRPYmooJGFyZ19jbGFzc19uYW1lKTsKCQl9CgkJCgkJJHIgPSBuZXcgUmVmbGVjdGlvbkNsYXNzKCRkZWNsWydjbGFzcyddKTsKCQkkbXlJbnN0YW5jZSA9ICRyLT5uZXdJbnN0YW5jZUFyZ3MoYXJnc09ianMpOwoJCXJldHVybiAkbXlJbnN0YW5jZTsKCX0KCQoJCn0KCmNsYXNzIENoZWFwR2VhcnN7CglwdWJsaWMgJHByaWNlID0gNTsKfQoKY2xhc3MgRXhwZW5zaXZlR2VhcnN7CglwdWJsaWMgJHByaWNlID0gMjA7Cn0KCmNsYXNzIEVuZ2luZXsKCXB1YmxpYyAkaHA9MjAwOwoJcHVibGljICRnZWFycz1udWxsOwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGdlYXJzKXsKCQkkdGhpcy0+Z2VhcnMgPSAkZ2VhcnM7Cgl9Cn0KCmNsYXNzIFR1cmJvRW5naW5lewoJcHVibGljICRocD0xMjAwOwoJcHVibGljICRnZWFycz1udWxsOwoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGdlYXJzKXsKCQkkdGhpcy0+Z2VhcnMgPSAkZ2VhcnM7Cgl9Cn0KCmNsYXNzIENhcnsKCXB1YmxpYyAkZW5naW5lID0gbnVsbDsKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCRlbmdpbmUpewoJCSR0aGlzLT5lbmdpbmUgPSAkZW5naW5lOwoJfQp9CgokY29udGFpbmVyID0gbmV3IERlcEluaigpOwokY29udGFpbmVyLT5kZWNsYXJlKCdub3JtYWxHZWFyJyxDaGVhcEdlYXJzKTsKJGNvbnRhaW5lci0+ZGVjbGFyZSgnc2t1cEdlYXInLEV4cGVuc2l2ZUdlYXJzKTsKCiRjb250YWluZXItPmRlY2xhcmUoJ25vcm1hbEdlYXJOb3JtYWxFbmdpbmUnLCdFbmdpbmUnLCBhcnJheSgnbm9ybWFsR2VhcicpICk7CiRjb250YWluZXItPmRlY2xhcmUoJ3NrdXBHZWFyTm9ybWFsRW5naW5lJywnRW5naW5lJywgYXJyYXkoJ3NrdXBHZWFyJykgKTsKCiRjb250YWluZXItPmRlY2xhcmUoJ3NrdXBFbmdpbmUnLCdUdXJib0VuZ2luZScsIGFycmF5KCdza3VwR2VhcicpKTsKCiRjb250YWluZXItPmRlY2xhcmUoJ2V2dGluYUtvbGEnLCdDYXInLCBhcnJheSgnbm9ybWFsR2Vhck5vcm1hbEVuZ2luZScpKTsKJGNvbnRhaW5lci0+ZGVjbGFyZSgnZXZ0aW5hS29sYUh1YmF2aUNoYXN0aScsJ0NhcicsIGFycmF5KCdza3VwR2Vhck5vcm1hbEVuZ2luZScpKTsKJGNvbnRhaW5lci0+ZGVjbGFyZSgnc2t1cGFLb2xhJywnQ2FyJywgYXJyYXkoJ3NrdXBFbmdpbmUnKSk7CgokZSA9ICRjb250YWluZXItPmdldE9iaignbm9ybWFsR2Vhck5vcm1hbEVuZ2luZScpOwplY2hvICRlLT5nZWFycy0+cHJpY2U7CgovLyRjYXIgPSAkY29udGFpbmVyLT5nZXRPYmooJ3NrdXBhS29sYScpOwoKCi8vJGNhciA9IG5ldyBDYXIobmV3IFR1cmJvRW5naW5lKG5ldyBHZWFycygpKSk7Ci8vZWNobyAkY2FyLT5lbmdpbmUtPmhwOwoKCgoKCgoKCgoKCgoKCgoKCgoK