PHP code example of autoframe / interface-to-concrete

1. Go to this page and download the library: Download autoframe/interface-to-concrete library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

autoframe / interface-to-concrete example snippets


	$oAfrConfigWiredPaths = new AfrInterfaceToConcreteClass(
	  $sEnv, //'DEV'/ 'PRODUCTION'/ 'STAGING'/ 'DEBUG'
	  $aEnvSettings [], //overwrite profile settings
	  $aExtraPaths = [] //all compose paths are covered
	  );
	$oAfrConfigWiredPaths->getClassInterfaceToConcrete();
	//OR STATIC CALL AFTER INSTANTIATING: 
	AfrInterfaceToConcreteClass::$oInstance->getClassInterfaceToConcrete();

    $sRuleName = 'CustomRule';
    $obj = \Autoframe\InterfaceToConcrete\AfrToConcreteStrategiesClass::getLatestInstance();
    //add a custom strategy
    $sCustomStrategy = 'customStrategy';
    $obj->addStrategy($sCustomStrategy, function (
        AfrToConcreteStrategiesInterface $oStrategiesInterface,
        array                            $aMap
    ) {
        //$aMap = ['ns1\\concreteInstantiable' => true, 'ns2\\concreteSingleton' => 2];
        if ($oStrategiesInterface->getNotConcreteFQCN() === 'extendClosureFn') {
            //match something
            if (isset($aMap['concreteSingleton'])) unset($aMap['concreteSingleton']);
        } else {
            $aMap = [];
        }
        return $aMap;
    });
    //set some custom rules
    $obj->addPriorityRules($sRuleName, [
        $sCustomStrategy, //custom
        AfrToConcreteStrategiesClass::StrategyClosureFn, //multiple
        AfrToConcreteStrategiesClass::StrategyContextBound, //single
        AfrToConcreteStrategiesClass::StrategyContextNamespaceFilterArr, //multiple
        AfrToConcreteStrategiesClass::StrategyContextHttpRequestUriRegex, //multiple
        AfrToConcreteStrategiesClass::StrategyGetDeclaredClasses, //multiple
        AfrToConcreteStrategiesClass::StrategyOtherNamespaceThanNotInstantiable, //multiple
        AfrToConcreteStrategiesClass::StrategyProjectComposerPsrNamespaces, //multiple
        AfrToConcreteStrategiesClass::StrategyFirstFoundWithWarning,  //single
        //    AfrToConcreteStrategiesClass::StrategyFirstFoundWithoutWarning,  //single
        //    AfrToConcreteStrategiesClass::StrategyShuffle,  //single
        //    AfrToConcreteStrategiesClass::StrategyFail,  //empty
    ])->setPriorityRule($sRuleName);

    $aMap = ['ns1\\concreteInstantiable' => true, 'ns2\\concreteSingleton' => 2];
    $sResplvedClass = $obj->resolveMap(
        $aMap,
        'ns\\notConcrete',
        $bCache = false
    ); 

    // OR
    $sResplvedClass = $obj->resolveInterfaceToConcrete(
        'ns\\notConcrete',
         $oAfrInterfaceToConcreteInterface, // \Autoframe\InterfaceToConcrete\AfrInterfaceToConcreteInterface
    $bCache = false
    );
    $sResplvedClass = '1|ns1\\concreteInstantiable'; // new ns1\\concreteInstantiable(...);
    $sResplvedClass = '2|ns2\\concreteSingleton'; //singleton::getInstance();
    $sResplvedClass = '0|ns\\notConcrete'; //fail