Ankündigung

Einklappen
Keine Ankündigung bisher.

Fatal error: Cannot redeclare class __SLT_V nach php_strip_whitespace()

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fatal error: Cannot redeclare class __SLT_V nach php_strip_whitespace()

    Hallo,

    ich habe ein Problem, bei dem ich nicht weiter komme - die Suche in google hat nichts für mich verwertbares geliefert ...

    1.) Es gibt EINE funktionierende PHP Datei (die nichts includiert etc. und alle Bausteine in der Datei beinhaltet), die eine (abstrakte) Klasse definiert, welche u.a. aus drei Traits "zusammengesetzt" ist - nennen wir sie "geht.php". Die Traits werden ebenfalls in der Datei "geht.php" definiert (wie gesagt, keine includes)

    2.) Ausführen der Datei "geht.php" funzt prima, alles geht wunderbar, keine Fehler.

    3.) Einlesen der Datei mittels $_c=file_get_contents( "geht.php"), anwenden von $_d=php_strip_whitespace( $_c ) und schreiben des code mit neuem Namen, sagen wir "test.php"
    file_put_contents( "test.php", $_d )

    Wenn ich nun statt "geht.php" die Datei "test.php" aufrufe (in der autoappend includiere), so bekomme ich den Fehler

    Fatal error: Cannot redeclare class SLT_V in <dir>\test.php on line 51

    Ich habe den Code manuell wieder umgebrochen - es gibt in der Datei keine weitere "trait SLT_V".

    Wenn ich in der autoprepend.php vor dem

    include "test.php"

    ausgebe

    echo "..." . trait_exists( "SLT_V" ) . "+++\n"

    ergibt das auch korrekt, wie erwartet "...+++".

    [EDIT]

    um sicher zu gehen, dass der Trait auch wirklich nicht existiert, habe ich um die gesamte Klassendefinition noch eine "if" gebaut:

    if ( ! trait_exists( "SLT_V" ) )
    {
    echo "!!!!!!!!!!!!!!!!!!!!!!\n";
    <code der den Fehler produziert>

    }else
    echo "????????????????\n";

    }

    Tja, und wie erwartet, kommt denn auch "!!!!!!!!!!!!!!!!!!!!!!!!!" vor dem Fehler ...

    [/EDIT]





    Was läuft da falsch?
    Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

  • #2
    Hast du es mal mit class_exists versucht? (Ernsthafte Rückfrage.)

    Kommentar


    • #3
      Ja. Habe ich. Gerade, nachdem ich den Beitrag schrieb, zur Sicherheit ...


      Keine Änderung. Ich habe auch nirgends eine solche Klasse definiert, und da die "test.php" auch die einzige Zeile in der autoappend.php ist, wüsste ich nicht woher das Ding kommen sollte.

      Und: Wenn's daran hinge, dass da irgendwoher plötzlich ne Klasse "SLT_V" existierte, sollte der Fehler ja auch it der "geht.php" kommen ... die "test.php" ist ja nur ne "gestrippte" Version der "geht.php" sonst alles gleich.
      Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

      Kommentar


      • #4
        Eine der Funstellen in google hat etwas von AltGr & Blank oder so geschrieben und dass das den Parser durcheinander bringen würde ... weiss jemand da etwas ?

        Und: Falls, wie finde ich den Kram in meinem Code?
        Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

        Kommentar


        • #5
          Kannst zum Beispiel mit einem Hexeditor nach einem "A0"-Byte (hexadezimal) (eventuell mit "C2"-Byte davor – UTF-8) suchen. Das ist das geschützte Leerzeichen. (Versuch ist es wert, schätze ich…)

          Mir fällt ansonsten leider nichts dazu ein. Gut wäre, wenn du ein testbares Beispiel posten könntest, das das Problem zeigt. Ich verstehe aber, dass das vielleicht nicht so leicht ist, falls es sich am Ende nicht doch um irgendeine mehr oder weniger offensichtliche, allgemeine Sache handelt, die beim Nachbau sofort wieder auftreten würde.

          Kommentar


          • #6
            Ist nix besonderes, nur etwas viel.

            Die autoprepend:

            PHP-Code:
            <?
            $_i=0;
            $_i++;
            echo $_i . "  " . basename( __FILE__ ) . "  ..." . trait_exists( "__SLT_V" ) . "+++\n";
            //print_r( debug_backtrace() );
                                                                
            $_a_a['GEHT']        = "geht.php";
            $_a_a['TEST']        = "test.php";

            $_a_a['do']            = "GEHT";
            //$_a_a['do']            = "TEST";                            //print_r( $_a_a );
            include $_a_a[ $_a_a['do'] ];
            Die Datei, die Funtioniert ( "geht.php" )

            PHP-Code:
            <?
            // __SLOLy == NACHFOLGER VON __SLOLB --> __SLOL_OOV2____BASE_[VERALTET slol_b].inc.php


                                                                                                                $__SLOL["@SLy_@@S"] = microtime( true );
                                                                                                                //~*$__SLOL["@SLy_@@S"] = microtime( true );
                abstract class __SLOLy
                {
                        //*M=version ************************************* DO NOT CHANGE STRUCTURE AS THIS IS UPDATED BY MAKE PROCESS
                                public static function version( $_out=true)
                                {
                                    $_v['VERSION']    = "2.50.0018"; $_v['DATE'] = "2014-10-27"; $_v['TYPE'] = "CLASS"; $_v['FILE']    = __FILE__; $_v['CLASS']    = __CLASS__;
                                    if ( $_out ){ print_r( $_v ); } else { return $_v; }
                                }
                        //*M=version END ************************************* DO NOT CHANGE STRUCTURE AS THIS IS UPDATED BY MAKE PROCESS
                    
                    // COPIED FROM __SLOL_OOV2__BASE.php
                    // FRAMEWORK GLOBAL CONSTANTS
                        const _FW_INSTALL                            = "VM=2&V=2.01
                                                                    &PH_ID_START=%    &    PH_ID_END=%
                                                                    &PH_ROOT=%ROOT%  &  PH_BOOT=%BOOT%  &PH_MACHINE=%MACHINE%  &  PH_SETTINGS_DIR=%DIR?_SETTINGS%
                                                                    &SYSTEM=IPS
                                                                    
                                                                    
                                                                    &DIR[_BOOT]=%DIR?_BOOT%  &  DIR[_ROOT]=%DIR?_ROOT%
                                                                    &DIR[_FW]=%DIR?_ROOT%__SLOL_OOV2\\  &  DIR[_SETTINGS]=%DIR?_ROOT%__SLOL_SETTINGS\\  &  DIR[_CORE]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\
                                                                    &FILE[_CALL]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__CALL.inc.php
                                                                    &FILE[_EXT]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2_EXT.obj.inc.php
                                                                    &FILE[PRESET_FILE]=%DIR?_ROOT%__SLOL_SETTINGS\\__SLOL_PRESET_[%LOC?MACHINE%]_V2.inc.php
                                                                    &FILE[PRESET_BASE_FILE]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__BASE_PRESET.inc.php
                                                                    
                                                                    &FW_NAME=SLOL  &  FW_ID=__SLOL
                                                                    &FW_CLASS=__SLOL2F  &  FW_LOADER_CLASS=__SLOLy
                                                                    &FW_PREFIX_FULL=__SLOL_OO&FW_PREFIX_FULL_V=__SLOL_OOV2&FW_PREFIX_FULL_CORE=__SLOL_OOV2__
                                                                    &FW_LOADER=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2_BASE_FULL.inc.php

                                                                    &CACHE_PRESET_ID=__SLOL_V2_PRESET
                                                                    &CACHE_LOAD=SLOL_OOV2_,CORE,DIR,FILE,LOC,ENV,intern

                                                                    &PRESET_FILE=%DIR?_ROOT%__SLOL_SETTINGS\\__SLOL_PRESET_[%LOC?MACHINE%]_V2.inc.php
                                                                    &PRESET_BASE_FILE    =%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__BASE_PRESET.inc.php
                                                                    &DEFAULT_DIR_NAMES=CORE|_CORE , SETUP|_SETUP , BRICKS|_BRICKS , LOG|_LOG , ALIAS|_ALIAS
                                                                    ";
                                                                    // OPTIONAL:::
                                                                    //&FILE[INIT_INCLUDE]=%DIR?_BOOT%__autoinclude___TEST_EMPTY.inc.php
                                                                        
                                                                    // FRÜHERE VERSIONEN
                                                                    //&FILE[_GET_CORE]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__GETCORE.inc.php

                                                                    //&CACHE_NON=__autoinclude_CACHE_NON.inc.php
                                                                    //&FW_DIR_ROOT=%DIR?_ROOT%__SLOL_OOV2\\  &  FW_DIR_SETTINGS=%DIR?_ROOT%__SLOL_SETTINGS\\  &  FW_DIR_CORE=%DIR?_ROOT%__SLOL_OOV2\\CORE\\

                    // COPIED FROM __SLOL_OOV2__BASE.php
                        
                        
                    // FIRST & VITAL SET OF ARRAYS TO ALLOW FOR INHERITANCE
                        protected    static $intern                    = array(); // INTERNALLY USED ARRAY
                            
                        public        static $DIR                    = array(); // DIRECTORIES WE USE
                        public        static $FILE                    = array(); // FILES WE USE    
                        public        static $LOC                    = array(); // SLOL RELEVANT ENVIRONMENT AT START TIME
                        public        static $CORE                    = array(); // INTERNAL CORE VALUES, VITAL FOR THE SYSTEM
                        public        static $INSTALL                = array(); // INSTALLATION SPECIFIC VALUES
                        public        static    $time                    = array(); // USED FOR TIMERS, LAPS ETC.
                        public        static    $SaR                    = array(); // SEARCH & REPLACE ARRAYS
                        public        static $VERSION                = array(); // VERSION INFOS OF CODE
                        protected    static $load                    = array(); // LOADER VALUES
                        public        static $ENV                    = array(); // SLOL RELEVANT ENVIRONMENT TO CLASS AND VICE VERSA

                        public        static $logy                    = array(); // UNIVERSAL, SIMPLE LOG ARRAY FOR SIMPLE LOGS
                        public        static $__do                    = array(); // CONTROLL ARRAY TO SWITCH ON/OFF FUNCTIONS
                        
                            
                        use __SLT_V;    
                        use __SLT_G;    
                        //use __SLT_D;    
                            
                            
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                    //                                                                                                                                                
                    // TINY-LOADER INIT METHODS                                                                                                                            
                    //                                                                                                                                                
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                        public static function init()
                        {                                                                                        //~*echo __METHOD__ . "\n";
                            $_init_1st_time                                    = ! isset( self::$load[ __CLASS__] );
                            self::$load[ __CLASS__ ]['init']['S'][]        = microtime(true); // GET TIME ASAP
                                
                            if ( $_init_1st_time )
                            { // VERY FIRST CALL TO init(); ==> INITIALIZE SEVERAL BASIC ARRAYS
                                self::init_BASICS();
                                self::init_1st_time();
                                                                                                                //~*self::__coredev( "show:ARR", "self::\$SaR" );//*~SLOL_MAKE_START:KILL_LINE
                            }else
                            { // ANY CONSECUTIVE CALL TO init();
                                self::init_Nnd_time( func_get_args() );
                                
                            }
                                                                                                                //self::_LOGy( "@SLy_INIT_MACHINE@@S", __LINE__ );
                        // TRY TO RUN THE MACHINE SPECIFIC INCLUDES TO GET MORE MACHINE SPECIFIC DATA
                            self::init_MACHINE();    
                                                                                                                //self::_LOGy( "@SLy_INIT_MACHINE@@E", __LINE__ );
                                
                            if ( isset( self::$FILE['INIT_INCLUDE'] ) && file_exists( self::$FILE['INIT_INCLUDE'] ) )
                            {
                                                                                                                self::_LOGy( "@SLy_INIT_INCLUDE@@S", __LINE__ );
                                include self::$FILE['INIT_INCLUDE']; // JUST RUN IF EXISTS, IT's OPTIONAL!!
                                                                                                                self::_LOGy( "@SLy_INIT_INCLUDE@@E", __LINE__ );
                            }
                            
                            self::$load[ __CLASS__ ]['init']['E'][]        = microtime(true);
                                                                                                                self::__coredev("_yL_init:e");//*~SLOL_MAKE_START:KILL_LINE
                        }//M=init()
                            
                            
                            //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                            protected static function init_1st_time()
                            {                                                                                    static::_LOG_U( "M", __METHOD__);
                                // SEARCH ARRAY INIT -- USED IN class::_REPLACE() 
                                    self::$SaR['_re_use_']                    = 1;
                                    self::$SaR['_ALL_']                    = array();


                                // GET THE BASICS THAT **MUST** BE ACHIEVED FROM THE ENVIRONMENT, SHALL NOT CHANGE IN RUNTIME
                                    self::$DIR['_BOOT']                    = __DIR__ . DIRECTORY_SEPARATOR;
                                    self::$DIR['_ROOT']                    = dirname( php_ini_loaded_file() ) . DIRECTORY_SEPARATOR;
                                    self::$LOC['MACHINE']                    = isset( $_ENV['SLOL_MACHINE']) ? $_ENV['SLOL_MACHINE'] : $_ENV['COMPUTERNAME'];
                                    self::$LOC['MACHINE_TYPE_ALIAS']        = isset( $_ENV['SLOL_MACHINE_TYPE_ALIAS']) ? $_ENV['SLOL_MACHINE_TYPE_ALIAS'] : "";
                                        
                                    $_SaR1                                    =& self::$SaR['_FW_'];
                                        $_SaR1['%DIR?_BOOT%']                    = self::$DIR['_BOOT'];
                                        $_SaR1['%DIR?_ROOT%']                    = self::$DIR['_ROOT'];
                                        $_SaR1['%LOC?MACHINE%']                = self::$LOC['MACHINE'];;
                                        $_SaR1['%LOC?MACHINE_TYPE_ALIAS%']    = self::$LOC['MACHINE_TYPE_ALIAS'];
                                        
                                // DEFINE SPECIAL CHARS WE WANT TO REPLACE & ADD USUALLY WHEN IMPORTING TEXT TO ARRAYS
                                    // REFER TO THE PUBLIC SaR-ARRAY ELEMENT FOR STR_TO_ARR
                                    $_SaR2                                    =& self::$SaR['_FW_STR_TO_ARR_']; // REF TO THE REPLACEMENT VALUES USED IN ALL _STR_TO_ARRAY FUNCTINS OF FW
                                    $_SaR2                                    = self::$SaR['_FW_'];
                                        
                                    $_crlf                = chr(13).chr(10);    $_tab                = chr(9);
                                    $_SaR2[ $_crlf ]    = "";                $_SaR2[ $_tab ]        = "";
                                        
                                    $_amp1                = "  &";            $_amp2                = "&  ";
                                    $_SaR2[ $_amp1 ]    = "&";                $_SaR2[ $_amp2 ]    = "&";
                                        
                                // IMPORT THE INSTALL INFOS AND REPLACE THEM BY THE BASIC VALUES FROM $SaR
                                    self::$load['load']                    = array();
                                    self::init_retrieve_INSTALL_INFOS();
                                    
                                    
                                                                                                                
                                // SET SOME FINALS & INIT ARRAYS
                                    self::$VERSION[__CLASS__]                = self::version( false );
                                    self::$load['args']                    = array();
                                        
                                    self::$CORE['loadcalls']                = array();
                                    
                                    self::$FILE['AUTOINCLUDE']                = __FILE__;
                                                                                                                //~*self::__coredev( "show:ARR", "self::\$INSTALL['_FW_']", "self::\$DIR", "self::\$FILE" );//*~SLOL_MAKE_START:KILL_LINE
                                    
                                
                                // DO SOME FINAL FIRST INIT WORK
                                    static::$intern['init'][__CLASS__]        = true;
                                    static::$intern['_EXT']                = true;
                                    
                                // MAKE SOME VALUES GLOBALLY AVAILABLE
                                    $GLOBALS['_ENV'][ self::$INSTALL['_FW_']['FW_NAME'] ]=& self::$ENV;
                                        
                                // REPORT TIME
                                    self::$time['FW_START']                = $GLOBALS[ self::$INSTALL['FW_ID'] ][ "@SLy_@@S" ];
                                    
                            }//M=init_1st_time()
                                
                                
                            //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                            protected static function init_Nnd_time( $A_args=array() )
                            {                                                                                    static::_LOG_U( "M", __METHOD__);
                                foreach( $A_args as $_enmu => $_val ) // FOREACH REPLACES if exist etc ...
                                {
                                                                                                                //~*echo __METHOD__ . " ... ID part=" . substr( $_val, 0, 14 ) . "\n";
                                    if ( substr( $_val, 0, 14 )=="||FW_INSTALL||" )
                                    {
                                                                                                                //~*echo __METHOD__ . " ... ID found\n";
                                        $_FW_INSTALL                        = substr( $_val, 15 );
                                        self::$load[__CLASS__]['init']['FW_INSTALL'][] = $_FW_INSTALL;
                                        self::$INSTALL['_FW_']                = array_merge( self::$INSTALL['_FW_'], self::STR_TO_ARRAY_PARSE( $_FW_INSTALL) );
                                        break;
                                    }// if identifier found
                                }// foreach $A_args
                                
                            }//M=init_Nnd_time()
                                
                            //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                            protected static function init_retrieve_INSTALL_INFOS()
                            {                                                                                    static::_LOG_U( "M", __METHOD__);
                                $_FW_INSTALL                                =& self::$load[__CLASS__]['init']['FW_INSTALL'][];
                                if ( isset( $_ENV['__SLOL']['FW_INSTALL'] ) )
                                {
                                    $_FW_INSTALL                            =  $_ENV['__SLOL']['FW_INSTALL'];
                                
                                }else{
                                    $_FW_INSTALL                            = self::_FW_INSTALL;
                                }
                                self::$INSTALL['_FW_']                        = self::STR_TO_ARRAY_PARSE( $_FW_INSTALL );
                                self::$INSTALL['FW_ID']                    = self::$INSTALL['_FW_']['FW_ID'];
                                    
                                // GENERALLY IMPORT ALL THE DEFINED ARRAYS IF SET IN INSTALL    
                                    $_import                                = array( "CORE", "DIR", "FILE", "LOC" );
                                    foreach ( $_import as $_enum => $_key )
                                    {
                                        if ( array_key_exists( $_key, self::$INSTALL['_FW_'] ) )
                                        {
                                            self::$$_key                    = array_merge( self::$$_key,  self::$INSTALL['_FW_'][ $_key ] );
                                        } 
                                    }
                                    
                                // DEFINE A FEW SPECIALS
                                //self::$CORE['FW_IDx'] = "predef";
                                    self::_DEFLT( self::$INSTALL['_FW_']['FW_ID'], self::$CORE['FW_ID'] );
                                
                            }//M=init_retrieve_INSTALL_INFOS()
                                
                                
                            //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                            protected static function init_MACHINE()
                            {                                                                                    static::_LOG_U( "M", __METHOD__);
                                $_L                                            =& static::$load[ 'PRM' ];
                                    
                                $_pre                                        = self::$DIR['_BOOT'] . "__autoinclude_";
                                $_f_file['AUTOINC_MACHINE']                = $_pre . "[" . self::$LOC['MACHINE'] . "]_V2.inc.php";
                                $_f_file['AUTOINC_MACHINE_TYPE']            = $_pre . "[" . self::$LOC['MACHINE_TYPE_ALIAS'] . "]_V2.inc.php";
                                self::$FILE['AUTOINCLUDE_MACHINE']        = self::_FIND_FILE( $_f_file, "" );
                                if ( self::$FILE['AUTOINCLUDE_MACHINE'] )    include self::$FILE['AUTOINCLUDE_MACHINE'];
                            }
                                
                                
                            //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                            protected static function init_BASICS()
                            {                                                                            
                                self::$logy[999][0]                            = "----";
                                $_BASICFILE                                    = str_replace( "MINI", "BASIC", __FILE__ );
                                if ( file_exists( $_BASICFILE ) )
                                {
                                    self::$FILE['BASICFILE']                = $_BASICFILE;
                                    include $_BASICFILE;
                                }
                                self::$__do['logU_XT']                        = false;

                                //if ( isset( static::$FILE['BASICFILE'] ) && file_exists( static::$FILE['BASICFILE'] ) ) include static::$FILE['BASICFILE'];
                                                                                                                static::_LOG_U( "M", __METHOD__);
                            }
                        
                };// CLASS=__SLOLy
                    
                    
                    
                trait __SLT_V // VITAL FUNCTIONS
                {
                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _LOAD()
                    {                                                                                            static::_LOG_U( "M", __METHOD__);
                                                                                                                static::_LOGy( "§SLyM_LDFW-M@@S" );
                        $_load_count                                        = count( static::$load['args'] );
                        static::$load['args'][ $_load_count ]                = func_get_args();
                                                                                                                static::_LOGy( "§LDR_ARGS@@S" );
                        // IMPORT ARGUMENTS AND SPLIT ALL UP INTO ONE ARRAY
                            $_class_args                                    =& static::$load['args'][ $_load_count ];
                            $_args                                            = array();
                            $_add_args                                        = array();
                            foreach ( $_class_args as $_enum => $_val )
                            {
                                if ( is_string( $_val ) )
                                {
                                    parse_str( $_val, $_add_args );
                                    $_args                                    = array_merge( $_args, array_change_key_case( $_add_args, CASE_UPPER ) );
                                }else{
                                    $_class_args['?IGNORED?'][]            = $_enum;
                                }
                            }
                            $_class_args                                    = array_merge( $_class_args, $_args );
                                                                                                                static::__coredev("_yL_LFGLF:cla" );//*~SLOL_MAKE_START:KILL_LINE
                                                                                                                //~*echo __METHOD__ . " @" . __LINE__ . "  \$_class_args=="; print_r( $_class_args );
                        // SEARCH FOR KEY ARGUMENTS
                            static::$load['load'][$_load_count ]            = array();
                            $_load                                            =& static::$load['load'][$_load_count ];
                            foreach ( $_class_args    as $_key => $_val )
                            {
                                if ( !( is_string( $_key ) && is_string( $_val ) ) ) continue;
                                $_val_T                                        = trim( $_val );
                                $_FW                                        = "";
                                switch ( $_key )
                                {
                                    // SUPPORTED FRAMEWORK LOADER ARGUMENTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    case "VER":
                                    case "VERSION":
                                    case "FW":
                                        // FRAMEWORK LOADER, WE NEED TO ANALYZE THE FULL VALUEs
                                        $_val_U                                = strtoupper( $_val_T);
                                        // CLEAN UP
                                        $_v_search                            = array("=", "VERSION", "VER", "V" );
                                        $_v_replace                            = array( "", "V", "V", "");
                                        $_clean                                = str_replace( $_v_search, $_v_replace, $_val_U );
                                        // SPLIT IN ARRAY
                                        $_val_arr                            = explode( ":", $_clean );
                                        // ASSIGN DEFAULTS
                                        $_val_ver                            = self::$INSTALL['_FW_']['VM'];
                                        $_val_type                            = "FULL";
                                        // NOW SEARCH PARTS FOR KNOWN VALUES
                                        foreach ( $_val_arr as $_enum => $_val_X )
                                        {
                                            // LOOK FOR VERSION NR
                                            if ( is_numeric( $_val_X[0] ) )
                                            {
                                                // ELIMINATE ".", THEN ","
                                                $_no1                        = explode( ".", $_val_X );
                                                $_no2                        = explode( ",", $_no1[0] );
                                                $_val_ver                    = $_no2[0];
                                            }else{
                                                $_val_type                    = $_val_X;
                                            }
                                        }// foreach
                                        $_load['FW'][ $_val_ver ]            = $_val_type;
                                        break;
                                    case "V0":
                                    case "V1":
                                    case "V2":
                                        $_load['FW'][ substr( $_key, 1, 1 ) ]="FULL";
                                        break;
                                        
                                    // SUPPORTED USER FILES LOADER ARGUMENTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    case "CUSTOM":
                                    case "USER":
                                        $_load['USER'][]                    = $_val_T;
                                        break;
                                        
                                    // BRICKS LOADER ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    case "BRICK":
                                    case "BRICKS":
                                        $_load['BRICKS'][]                    = $_val_T;
                                        break;
                                }
                                
                            }
                                                                                                                //~*echo __METHOD__ . " @" . __LINE__ . "  \$_load=="; print_r( $_load );//*~SLOL_MAKE_START:KILL_LINE
                                                                                                                //~*static::__coredev("_yL_LFGLF:analyze:lc=" . $_load_count );//*~SLOL_MAKE_START:KILL_LINE
                                                                                                                static::_LOGy( "§LDR_ARGS@@E" );
                        // FIRST, LOAD FRAMEWORKS
                            if ( array_key_exists( "FW", $_load ) )
                            {
                                foreach ( $_load['FW'] as $_key => $_val )
                                {
                                    static::_LOAD_FW( $_key, $_val );
                                }
                            }
                        
                        // LOAD BRICKS
                            if ( array_key_exists( "BRICKS", $_load ) )
                            {
                                foreach ( $_load['BRICKS'] as $_key => $_val )
                                {
                                    static::_LOAD_FW( $_key, $_val );
                                }
                            }
                        
                    }//M=_LOAD()
                        
                        
                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _LOAD_FW( $A_version="2", $A_type="FULL" )
                    {//  V2.01 | 2014-10-25 | CORE-T-V | JW |
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        // LOAD PREVIOUS VERSION THROUGH SEPARATE LOADER
                            $_this_version                                    = $A_version==static::$INSTALL['_FW_']['VM'];
                            if ( !$_this_version )
                            {
                                return require_once static::_LOG_U( "R","LOADER_FW_PREVIOUS", static::$DIR['_CORE'] . "__SLOL_OOV2__LOADER_PREVIOUS.inc.php" );  
                            }            
                            
                        // LOAD THIS VERSION
                        // AVOID SECOND LOADING ##########################################################################################
                            static::$CORE['loadcalls'][ $A_version ]        = static::_DEFLT( 0, static::$CORE['loadcalls'][ $A_version ] ) +1;
                            if ( self::$CORE['loadcalls'][ $A_version ] > 1 )
                            {
                                return;
                            /*
                                //###TBD-SLOL:  SECOND_INIT_DO IMPLEMENTIEREN ?????????????????????????????????????????????????????????????
                                    $_load_method                    = static::$CORE['CLASS_CORE'] . "::init_SLOL_SECOND_DO";
                                    $_log_method                    = static::$CORE['CLASS_CORE'] . "::log_err_warn";
                                    call_user_func( $_log_method, "*** FRAMEWORK ALREADY LOADED. CALL LOADER TO ALLOW FOR USE OF ARGS ***", "_L_", __LINE__, __FILE__ );
                                    return call_user_func( $_load_method, $_LOAD_FW_ARGS );
                            */
                            }
                            
                            
                        // NOW LOAD CLASS ################################################################################################
                                                                                                                static::_LOGy( "§LDR_GEN@@S" );
                        // WORK ON THE LOADER TYPE
                            if ( stripos( "°FAST°SMALL°SHORT", $A_type ) )
                            {
                                $_LOADER_TYPE                                = "_FAST";
                            //}else if ( stripos( "°TEST", $A_type ) )
                            }else if ( $A_type== "TEST" ) 
                            {
                                $_LOADER_TYPE                                = "_TEST";
                            }else{
                                $_LOADER_TYPE                                = "_FULL";
                            }
                                
                            static::$FILE['LOADER_SUB']                    = static::$DIR['_CORE'] 
                                                                            . "__SLOL_OOV" . $A_version . "__LOADER_" 
                                                                            . static::$INSTALL['_FW_']['SYSTEM'] . $_LOADER_TYPE 
                                                                            . ".inc.php";
                                
                                                                                                                static::_LOGy( "§LDRI-requ@@S", __LINE__ );
                            require_once static::_LOG_U( "R","LOADER_FW_ACTUAL type=" . $_LOADER_TYPE, self::$FILE['LOADER_SUB'] );
                                                                                                                static::_LOGy( "§LDRI-requ@@E", __LINE__);
                                                                                                                static::_LOGy( "§LDR_GEN@@E" );

                    }//M=_LOAD_FW()
                        
                        // MIGRATION HELPERS
                            public static function _LOAD_FW0() { self::_LOAD( "VER=0" ); }//*M=_LOAD_FW0
                            public static function _LOAD_FW1() { self::_LOAD( "VER=1" ); }//*M=_LOAD_FW1
                            public static function _LOAD_FW2() { self::_LOAD( "VER=2" ); }//*M=_LOAD_FW2
                        
                        
                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _AUTOINCLUDE( $A_just_return_list=false )
                    {//  V2.01 | 2014-10-25 | CORE-T-V | JW |
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        $_pre                                        = self::$DIR['_BOOT'] . "__autoinclude_";
                        $_file['AUTOINC_MACHINE']                    = $_pre . "[" . self::$LOC['MACHINE'] . "]_V2.inc.php";
                        $_file['AUTOINC_SLOL_TYPE']                = $_pre . "[" . self::$LOC['MACHINE_TYPE_ALIAS'] . "]_V2.inc.php";
                        $_file['AUTOINC_SLOL']                    = $_pre . "IPS_SLOL_OOV2.inc.php";
                        $_file['AUTOINC_IPS']                        = $_pre . "IPS_original.inc.php";
                        $_file['AUTOINC_APACHE']                    = $_pre . "APACHE.inc.php";
                            
                        if ( $A_just_return_list ) return $_file;
                            
                        self::$FILE['AUTOINCLUDE']                    = self::_FIND_FILE( $_file );
                        return self::$FILE['AUTOINCLUDE'];
                    }//*M=AUTOINCLUDE
                        
                        
                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _AUTOAPPEND( $A_just_return_list=false )
                    {//  V2.01 | 2014-10-25 | CORE-T-V | JW |
                                                                                                            static::_LOG_U( "M", __METHOD__);

            echo "\n\n------------------------- NEEDS TO BE DONE : " . __METHOD__ . "  IN " . __FILE__ . "\n\n";
            RETURN;
                        // FOR WEBFRONT, WE NEED TO NOT INCLUDE THE NORMAL LOADER
                        if ( isset( $_SERVER['REQUEST_URI'] ) && $_SERVER['REQUEST_URI'] == "/?" )
                        {    // WEBFRONT --> NO ECHO?
                            return false;
                            
                        }else if ( class_exists( "_AUTOAPPEND" ) )
                        {
                            return _AUTOAPPEND::_END();
                            
                        }else if ( isset( $_ENV['autoappend'] ) ) 
                        {
                            include $_ENV['autoappend'];
                            
                        }else
                        {
                            $_pre                                    = self::$DIR['_BOOT'] . "__autoappend_";
                            $_file['AUTOAPP_MACHINE']                = $_pre . "[" . self::$LOC['MACHINE'] . "]_V2.inc.php";
                            $_file['AUTOAPP_SLOL_TYPE']            = $_pre . "[" . self::$LOC['MACHINE_TYPE_ALIAS'] . "].inc.php";
                            $_file['AUTOAPP_SLOL']                = self::$DIR['_CORE'] . "SLOL_OOV2__autoappend.inc.php"; 
                            $_file['AUTOAPP_IPS']                    = $_pre . "IPS_original.inc.php";
                            $_file['AUTOAPP_APACHE']                = $_pre . "APACHE.inc.php";
                                
                            if ( $A_just_return_list ) return $_file;
                                
                            self::$FILE['AUTOAPPEND']                = self::_FIND_FILE( $_file );
                            return self::$FILE['AUTOAPPEND'];
                        }// if isset
                            
                    }//*M=AUTOAPPEND
                        
                        
                        
                        
                        
                        
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                    //                                                                                                                                                
                    // PRE-FULL-FRAMEWORK-LOAD LOGGING METHODS                                                                                                            
                    //                                                                                                                                                
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                    public static function _LOGy( $A_tag="", $A_line=0, $A_time=NULL, $A_file="", $A_tx="" )
                    {//  V1.20 | 2014-10-01 | CORE-T-V | JW | --> TINy LOG
                        $_args                                        = func_get_args();
                        $_args['n']                                    = 1;
                        $_args['t']                                    = microtime( true );
                        static::$logy[]                            = $_args;
                            
                    }//*M=_LOGy
                        
                        
                    public static function _LOGyT( $A_tag="", $A_tx="", $A_line=0, $A_file="", $A_time=NULL )
                    {//  V1.20 | 2014-10-01 | CORE-T-V | JW | --> TINy LOG
                        static::_LOGy( $A_tag, $A_line, $A_time, $A_file, $A_tx );
                    }//*M=_LOGyT
                        
                        
                    public static function _LOG_U( $A_type="", $A_tag="", $A_return="", $A_time=0, $A_arg_str="" )
                    {//  V1.20 | 2014-10-01 | CORE-T-V | JW | --> TINy LOG
                        $_args                                        = func_get_args();
                        $_args['n']                                    = 2;
                        $_args['t']                                    = microtime( true );
                        if ( static::$__do['logU_XT'] ) $_args['db'] = debug_backtrace();
                        self::$logy[]                                = $_args;
                        return $A_return;
                            
                    }//*M=_LOG_U
                        
                        
                        
                        
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                    //                                                                                                                                                
                    // TINY-LOADER EXTENSION METHODS                                                                                                                    
                    //                                                                                                                                                
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _FN( $A_what="" )
                    {// V1.00 | 2014-10-29 | CORE-T-V | JW        
                                                                                                                static::_LOG_U( "M", __METHOD__ . "=" . $A_what );
                        // RUNS A OR GETS INFO ABOUT A (CORE) PROGRAM THT WE HAVE DEVELOPPED SEPARATELY IN STEAD OF A FUNCTION
                        // FIRST GETS INFOS ABOUT A REQUESTED CORE PROGRAM FROM self::$FILE['_GET_CORE']
                        if ( $A_what==""    ) return;
                        $A_args                                        = func_get_args();// CAPTURE ARGUMENTS FOR CORE PROGRAM TO RUN
                        if ( !class_exists( "__SLOLy_EXT" ) )
                        {
                            require_once static::_LOG_U( "R", "EXT-LOADER", self::$FILE['_EXT'] );
                        }
                            
                        $_return                                    = __SLOLy_EXT::__MAIN( $A_args );
                        $_prm                                        =&__SLOLy_EXT::$ret;
                        if ( $_prm['do'] )
                        {    static::_LOG_U( $_prm['do'],    $A_what . "[EXT]", $_prm['prm']['file'] );
                            if ( $_prm['do']=="I" )    return require         $_prm['prm']['file'];
                            if ( $_prm['do']=="IO" )    return include_once    $_prm['prm']['file'];
                            if ( $_prm['do']=="R" )    return require            $_prm['prm']['file'];
                            if ( $_prm['do']=="RO" )    return require_once    $_prm['prm']['file'];
                        }
                    }//*M=_FN
                        
                        
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _USR( $A_what="", $A_get_only="" )
                    {                                                                                            static::_LOG_U( "M", __METHOD__);
                        // RUNS A OR GETS INFO ABOUT A USER DEFINED PROGRAM
                        // FIRST GETS INFOS ABOUT A REQUESTED CORE PROGRAM FROM self::$FILE['_GET_CORE']
                        // IF FIRST PARAMETER IS "*", WILL JUST RETURN THE FILENAME OF SUCH CORE PROGRAM, ELSE WILL RUN THE RETURNED FILE
                        $A_args                                        = func_get_args();// ARGUMENTS FOR CORE PROGRAM TO RUN
                        $_get_only                                    = strtoupper( $A_get_only )=="*";
                            
                        if ( !class_exists( "__SLOL_USR" ) )
                        {
                            require static::_LOG_U( "R", "USR-LOADER::" . $A_what, static::$FILE['USR'] );
                        }    
                        $_from_get_core                                = __SLOL_USR::get( $A_what );
                            
                        if ( $_get_only ) return $_from_get_core; 
                            
                        $_d                                            = static::$PRESET['DELI2'];
                        if ( $_from_get_core <> "" )     return include static::_LOG_U( "I" , $A_what, $_from_get_core );
                            
                        return false;
                    }//*M=_USR
                        
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _SETTING( $A_arr="", $A_key="", $A_val="", $A_CLASS="" )
                    {// V0.01 | 2014-??-?? | CORE-T-V | JW
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        $_useCLASS                                    = $A_CLASS=="" ? get_called_class() : $A_CLASS;
                        $_arr[ $A_arr ][ $A_key ]                    = $A_val;
                        return call_user_func( $_useCLASS .'::_CLASS_SETTER', $_arr );
                    }//*M=_SETTING
                        
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    //*M=_CLASS_SETTER (START VERSION)
                    // THIS WILL BE REPLACED WITH MORE SOPHISTICATED ARRAY-MERGER IN MASTER CLASS
                    // HERE, WE JUST SET ONE ELEMENT AT A TIME, LATERm WE ARE BLE TO SET ARRAY STRUCTURES AT ONCE
                    public static function _CLASS_SETTER( $A_array )
                    {// V0.01 | 2014-??-?? | CORE-T-V | JW
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        $_CLASS                                        = __CLASS__;
                        $_main                                        = key( $A_array );
                        if ( property_exists( $_CLASS, $_main ) )
                        {
                            $_class_arr                                =& static::$$_main;
                            $_val                                    = $A_array[ $_main ];
                            $_key                                    = key( $_val );
                            $_class_arr[ $_key ]                    = $_val[ $_key ];
                        }// if prop_exist
                    }//*M=_CLASS_SETTER
                        
                        
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                    //                                                                                                                                                
                    // CORE DEVELOPMENT HELPER FUNCTION                                                                                                                    
                    //                                                                                                                                                
                    //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                    public static function __coredev()
                    {// V2.03 | 2014-10-29 | CORE-T-V | JW        
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        // switch on/off by using   // (on)    or none (off)   in next line 
                        //return;                                                                                 //*~SLOL_MAKE_START:COMMENT_LINE
                        //~* CORE TESTING****************************
                        $_args                                        = func_get_args();                            //*~SLOL_MAKE_START:COMMENT_LINE
                         $_args[-1]                                    = __METHOD__;                                //*~SLOL_MAKE_START:COMMENT_LINE
                        include self::$DIR['_CORE'] . "__SLOL_OOV2____coredev.inc.php";                    //*~SLOL_MAKE_START:COMMENT_LINE
                    }//M=__coredev

                }//TRAIT=SLT_L




                //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                //                                                                                                                                                
                // TINY-LOADER GENERAL METHODS                                                                                                                        
                //                                                                                                                                                
                //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                trait __SLT_G
                {
                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _DEFLT( $A_default="", &$A_var )
                    {// V1.00 | 2014-10-29 | CORE-T-G | JW        
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        if ( !isset( $A_var ) )
                        {
                            $A_var                                = $A_default;
                        }
                        return $A_var;  
                    }

                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function STR_TO_ARRAY_PARSE( $A_string, $A_SaR_ix="_FW_STR_TO_ARR_" )
                    {// V1.00 | 2014-10-10 | CORE-T-G | JW        
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        // function: REPLACES DEFINED PLACEHOLDERS IN THE $A_string AND THEN INTERPRETES IT AS AN ARRAY DEFINITION (SEE parse_str() FOR DETAILS)
                            
                        // USE REPLACEMENT-ARRAY IF EXISTS TO CLEAN THE STRING BY REPLACING PLACEHOLDERS AGAINST VALUES
                            if ( array_key_exists( $A_SaR_ix, self::$SaR ) )
                            {    
                                $_SaR                                        =& self::$SaR[ $A_SaR_ix ];
                                $_clean_string                                = str_replace( array_keys( $_SaR), $_SaR, $A_string );
                            }else{
                                $_clean_string                                =& $A_string;
                            }
                            
                        // CONVERT STRING TO ARRAY    
                            parse_str( $_clean_string, $_ret );
                            return $_ret;
                            
                    }//M=STR_TO_ARRAY_PARSE
                        
                        
                    //~** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _FIND_FILE( $A_file_arr, $A_false_value=false )
                    {// V1.00 | 2014-08-10 | CORE-T-G | JW        
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        // SEARCHES THE GIVEN LIST OF FILES AND RETURNS THE FIRST FOUND OR FALSE IF NON FOUND
                        foreach ( $A_file_arr as $_ix => $_file )
                        {
                            if ( file_exists( $_file ) )    return $_file;
                        }
                        return $A_false_value;
                    }//*M=_FIND_FILE
                        
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function _GET( $A_request="" )
                    {// V2.01 | 2014-10-28 | CORE-T-G | JW        
                                                                                                                static::_LOG_U( "M", __METHOD__);
                        $_r[' ']    ="";        $_r[';']    =",";
                        $_r['?']    =",";        $_r['|']    =",";
                        $_request                                            = str_replace( array_keys( $_r ), $_r, $A_request );
                                
                        if ( $_request=="" )
                        {
                            $_ret                                            = false;
                        }else{
                            $_request_arr                                    = explode( ",", $_request );
                            $_ret                                    = array();
                                
                            foreach ( $_request_arr as $_enum => $_var )
                            {    
                                $_code                            = "return static::\$" . $_var .";";
                                $_ret[ $_var ]                    = eval( $_code );
                            }
                        }
                        return $_ret;
                    }


                        
                        
                }//TRAIT=SLT_G


                trait __SLT_D
                {
                //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                //                                                                                                                                                
                // TINY-FRAMEWORK DEVELOPPER METHODS                                                                                                                    
                //                                                                                                                                                
                //# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
                        
                    public static function _DEV_echo( $A_tx="", $A_tpl="long" )
                    {                                                                                            static::_LOG_U( "M", __METHOD__);
                        if ( self::$intern[ '_dev_echo_no' ] ) return;
                            
                        $_bt                                        = debug_backtrace();
                        $_bt[0]['NUM']                                = ++self::$intern['_dev_echo_cnt'];
                        $_bt[0]['METHOD']                            = __METHOD__;
                        $_bt[0]['TX']                                = $A_tx;
                        unset( $_bt[0]['args'] );
                        $_tpl_ix                                    = '_dev_echo_tpl_' . strtolower( $A_tpl );
                        $_t                                            = self::$intern[ $_tpl_ix ];
                        echo static::_REPLACE( $_t, $_bt[0]  );
                    }//*M=_DEV_ECHO
                        
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function __DEV()
                    {                                                                                            static::_LOG_U( "M", __METHOD__);
                        $A_args                                        = func_get_args();
                        if ( class_exists( self::$CORE['CLASS_DEV'] ) )
                        {
                            return call_user_func( self::$CORE['CLASS_DEV'] . "::__MAIN", $A_args );
                            
                        }else if ( isset( $_ENV['SLOL_DO_DEV'] ) )
                        {
                            return include_once static::$FILE['__DEV_SIMPLE'];  
                            
                        }
                    }//*M=__DEV
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function __CHECKME()
                    {                                                                                            static::_LOG_U( "M", __METHOD__);
                        // RUNS "THE" CHECK-OBJECT IF "CHECKME" IS SET. HELPFUL FOR DEVELOPMENT
                        if ( static::$CORE['__CHECKME'] || isset( $_ENV['SLOL__CHECKME'] ) )
                        {
                            $A_args                                    = func_get_args();
                            //* LOAD CLASS IF NOT YET DONE
                            if ( ! class_exists("__SLOL__CHECKME" ) ) include_once self::_LOG_U( "I", "CHECKME-LOADER", static::$FILE['__CHECKME'] );
                            __SLOL__CHECKME::__MAIN( $A_args );
                        }
                    }//*M=__CHECKME
                        
                        
                    //*~* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                    public static function __DEBUG_LOAD()
                    {                                                                                            static::_LOG_U( "M", __METHOD__);
                        if ( static::$debug['load'] )
                        {
                            $A_args                                    = func_get_args();
                            include self::_LOG_U( "I", "DEBUG-LOAD", static::$FILE['_DEBUG'] );
                            static::$debug['load']                    = !class_exists( "__SLOL_DBG" );
                            static::$CORE['LOADED']['__SLOL_DBG']= 1*class_exists( "__SLOL_DBG" );
                        }
                        
                    }//*M=__DEBUG_LOAD
                            public static function __DEBUG()
                            {
                                if ( static::$debug['do'] ) return false;
                                                                                                                static::_LOG_U( "M", __METHOD__);                        
                                // RUNS "THE" CHECK-OBJECT IF "CHECKME" IS SET. HELPFUL FOR DEVELOPMENT
                                if ( static::$CORE['__CHECKME'] || isset( $_ENV['SLOL__CHECKME'] ) )
                                {
                                    $A_args                            = func_get_args();
                                    //* LOAD CLASS IF NOT YET DONE
                                    if ( ! class_exists("__SLOL__CHECKME" ) ) include_once self::_LOG_U( "I", static::$FILE['__DEV_SIMPLE'] );
                                    __SLOL__CHECKME::__MAIN( $A_args );
                                }
                            }//*M=__CHECKME
                        
                        
                }//TRAIT=SLT_D

                    
                    
                __SLOLy::init();
                                                                                                                __SLOLy::_LOGy( "@SLy_AI_FINAL@@S", __LINE__ );
                if ( __SLOLy::_AUTOINCLUDE() ) include_once __SLOLy::_LOG_U( "I", "AUTOINCLUDE_FINAL", __SLOLy::$FILE['AUTOINCLUDE'] );
                                                                                                                __SLOLy::_LOGy( "@SLy_AI_FINAL@@E", __LINE__ );
                                                                                                                __SLOLy::_LOGy( "@SLy_@@E", __LINE__ );
                                                                                                                //~*__SLOLy::_LOGy( "@SLL_@@E", __LINE__ );
                                                                                                                //*~$__SLOL["@SLL_@@E"] = microtime( true );
                                                                                                                __SLOLy::_LOG_U("*", "[__SLOLy AUTOINCLUDE] END" );
                                                                                                                __SLOLy::_LOG_U("?L1" );

            der code, mit dem ich das umwandle:

            PHP-Code:
                $_f['in']         = __SLOLy::$DIR['_BOOT'] . "geht.php";
                
            $_f['out']        = __SLOLy::$DIR['_BOOT'] . "test.php";
                
            print_r$_f );

                
            $_c             php_strip_whitespace$_f['in'] );
                
            file_put_contents$_f['out'], $_c ); 
            Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

            Kommentar


            • #7
              Ich habe auch schon sowohl die Datei "geht.php" als auch die "test.php" mit folgendem code geprüft und KEIN besonderes Zeichen gefunden. Hat da jemand vielleicht einen Hinweis, ob die was als "OK" durchgehen läßt, was aber Schrereien machen kann?:

              PHP-Code:
                  $_f['in']         = __SLOLy::$DIR['_BOOT'] . "test.php";
                  
              $_f['in']        = __SLOLy::$DIR['_BOOT'] . "geht.php";
                  
              print_r$_f );
                  
                  
                  
              $_c                file_get_contents$_f['in'] );
                  
              $_len            strlen$_c );
                  
              $_z                1;
                  
                  for ( 
              $_i=0$_i $_len$_i++) 
                  {
                      
              $_ord            ord$_c$_i ] );

                      if (
              $_ord==10 $_z++;
                      
                      if ( 
              $_ord >31 && $_ord <127) continue; //
                      
              if ( $_ord ==10 || $_ord == 13 || $_ord==|| $_ord==180 || $_ord==167 || $_ord=176 ) continue; // cr lf tab ´ §  


                      //echo $_i . "   " . $_c[ $_i ] . " == " . $_ord . "\n";
                      
              echo sprintf"%03u"$_z ) . ":" .  sprintf"%05u"$_i+) . "   " $_c$_i ] . " == " $_ord "\n";


                  } 
              Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

              Kommentar


              • #8
                Das du durch den Code noch durchsteigst ...

                - keine Strikte Namenskonvention
                - Chaotischer Code Style
                - Missverstandenes OOP
                - schwer Wartbarer Code

                Du solltest dir dringend Gedanken über die Datenstrukturen und Namensgebungen machen. Angefangen bei Klassennamen. Ich rate auch dazu auf Caching Mechanismen zurückzugreifen statt auf "kompilierte Klassen-Definitionen", das würde zumindest aus meiner Sicht auch den Source-Code besser abstrahierbar machen. ( Mehrere Klassen die durch byte-code caching einmalig geparsed werden wenn sie via autoloader geladen werden.

                Das hier ist etwas was du locker im Cache "persistieren" kannst:
                PHP-Code:
                const _FW_INSTALL 'VM=2&V=2.01&PH_ID_START=%&PH_ID_END=%&PH_ROOT=%ROOT%&PH_BOOT=%BOOT%&PH_MACHINE=%MACHINE%&PH_SETTINGS_DIR=%DIR?_SETTINGS%&SYSTEM=IPS&DIR[_BOOT]=%DIR?_BOOT%&DIR[_ROOT]=%DIR?_ROOT%&DIR[_FW]=%DIR?_ROOT%__SLOL_OOV2\\&DIR[_SETTINGS]=%DIR?_ROOT%__SLOL_SETTINGS\\&  DIR[_CORE]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\&FILE[_CALL]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__CALL.inc.php&FILE[_EXT]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2_EXT.obj.inc.php&FILE[PRESET_FILE]=%DIR?_ROOT%__SLOL_SETTINGS\\__SLOL_PRESET_[%LOC?MACHINE%]_V2.inc.php&FILE[PRESET_BASE_FILE]=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__BASE_PRESET.inc.php&FW_NAME=SLOL&FW_ID=__SLOL&FW_CLASS=__SLOL2F  &  FW_LOADER_CLASS=__SLOLy&FW_PREFIX_FULL=__SLOL_OO&FW_PREFIX_FULL_V=__SLOL_OOV2&FW_PREFIX_FULL_CORE=__SLOL_OOV2__&FW_LOADER=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2_BASE_FULL.inc.php&CACHE_PRESET_ID=__SLOL_V2_PRESET&CACHE_LOAD=SLOL_OOV2_,CORE,DIR,FILE,LOC,ENV,intern&PRESET_FILE=%DIR?_ROOT%__SLOL_SETTINGS\\__SLOL_PRESET_[%LOC?MACHINE%]_V2.inc.php&PRESET_BASE_FILE=%DIR?_ROOT%__SLOL_OOV2\\CORE\\__SLOL_OOV2__BASE_PRESET.inc.php&DEFAULT_DIR_NAMES=CORE|_CORE,SETUP|_SETUP,BRICKS|_BRICKS,LOG|_LOG,ALIAS|_ALIAS'
                unzwar als Array. Am besten mit aussagekräftigen Informationen. Wobei ich aber jetzt schon sehen dass das eher eine Vorlage für eine Konfiguration ist, welche du auch im Cache vorhalten kannst, oder noch besser gleich als Konfigurierbares, Cache-fähiges Objekt.

                Von Class-Generatoren / Compiler würde ich ganz weit weggehen, da du dir dort mehr Fehler aufprägst als du beheben willst.

                Auch wenn das wahrscheinlich nie da landen wird: Auf Github würdest du wohl gegen 0 Leute finden die sich den Source auch nur 1 Minute antun wollen würden, geschweige denn diesen Verwenden oder Erweitern möchten.
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #9
                  Hat noch jemand eine Idee zur eigentlichen Fragestellung?

                  Die hat ja mit Code Stil nix tun ... meine ich.
                  Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

                  Kommentar


                  • #10
                    (Das ist wohl auch wieder ein Fall, der zeigt, wie supi Tabs in Quellcode sind.)

                    Zur Fragestellung:

                    Alles auf PHP 5.5.9-1ubuntu4.4 (cli) (built: Sep 4 2014 06:56:34)

                    Ich habe mir test.php erzeugt und dann geht.php und test.php jeweils durch einen Tokenizer gejagt (token_get_all). Dabei habe ich T_WHITESPACE und T_COMMENT rausgeworfen und die übrigen Token-Namen jeweils in eine Datei geschrieben. Diese beiden Dateien habe ich dann gedifft. Sie sind identisch.

                    (Ich habe das <? durch <?php ersetzt. Glaube aber nicht, dass das was ausmacht.)

                    Andere Ideen:

                    - Du hast auf dem Include-Pfad weiter vorne schon eine Datei test.php, die statt der beabsichtigten test.php eingebunden wird. (Das hier halt: http://www.ermshaus.org/2012/09/php-...emals-ohne-dir.) Das wäre aber wohl ein ziemlicher „Zufall“. Dafür spricht allerdings, dass die Fehlermeldung eine Zeile 51 in test.php angibt, dass test.php aber nur 26 Zeilen lang ist.

                    - Für wahrscheinlicher halte ich, dass die PHP-Fehlermeldung der Wahrheit entspricht und du irgendeinen Logikfehler im Code selbst hast.

                    Etwa dieser Abschnitt ist ein Kandidat:

                    PHP-Code:
                                    if ( isset( self::$FILE['INIT_INCLUDE'] ) && file_existsself::$FILE['INIT_INCLUDE'] ) )
                                    {
                                                                                                                        
                    self::_LOGy"@SLy_INIT_INCLUDE@@S"__LINE__ );
                                        include 
                    self::$FILE['INIT_INCLUDE']; // JUST RUN IF EXISTS, IT's OPTIONAL!!
                                                                                                                        
                    self::_LOGy"@SLy_INIT_INCLUDE@@E"__LINE__ );
                                    }

                                    
                    self::$load__CLASS__ ]['init']['E'][]        = microtime(true); 
                    Gleiches gilt aber – aus unserer Sicht hier – für alle Teile, die irgendwas einbinden.

                    Kommentar


                    • #11
                      Noch ein Gedanke: Vielleicht speicherst du mal testweise die unveränderte geht.php als test.php und guckst, was dann passiert. So ließe sich ja recht sicher ausschließen, dass es an dem Whitespace-Stripping liegt.

                      Kommentar


                      • #12
                        Zitat von tr0y Beitrag anzeigen
                        [...] 0 Leute finden die sich den Source auch nur 1 Minute antun wollen würden, geschweige denn diesen Verwenden oder Erweitern möchten.
                        Ich wäre einer davon... du meine Güte, WAS in des Herrn heiligem Namen IST DAS?

                        Nach etwas 1 Minute hab ich Kopfschmerzen vom drüber gucken bekommen und glaube vage irgedendwas von "framework" und "loader" aufgeschnappt zu haben, weiss aber dennoch nicht, was dieser Codewust überhaupt bewirken soll.

                        Abstrakte Klassen mit statischen Members (überhaupt sieht man nur statische Funktionen), gäbs ne OOP-Polizei müsste man euch wegen Vergewaltigung anzeigen.

                        Was auch immer der Code macht - das entfernen aller Whitespaces soll genau was bringen? Geschwindigkeit beim Parsen? *hüstel*

                        Was wäre denn, wenn du vor die Deklaration deines traits in ein if-not-exists einbaust... das sollte absolut sicherstellen, das auch mehrfachem Include nur eine einzige Deklaration existiert.
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Asche auf mein Haupt - war gestern wohl zu spät.

                          & Danke für den Tip mit der Umbenennung! Der Loader wurde in der "test.php" tatsächlich zweimal aufgerufen - aber nur wegen des geänderten Namen.

                          Um sicher zu stellen, dass ich die nicht versehentlich überschreibe, habe ich sie vor php_strip_whitespace() in "geht.php" umgeschrieben und diese dann mit whitespace behandelt.

                          Der "Fehler" steckt in dieser Zeile:

                          PHP-Code:
                          $_BASICFILE str_replace"MINI""BASIC"__FILE__ );
                          include 
                          $_BASICFILE
                          denn "geht.php" heißt bei mir eigentlich "<libary_prefix>_MINI.PHP" und nach Umbenennung wird da nix replaced und __FILE__ (=="test.php") halt nochmals included.

                          Nach nochmals ein paar Stunden Suche heute morgen bin ich dann darauf gekommen.

                          Das Hauptproblem - sonst wäre ich viiiiel früher darauf gekommen - ist, dass bei FATAL das errorhandling nicht aufgerufen wird, ich also dieses doppelte Aufrufen trotz "echo-breakpoints" und debug_backtrace() in meinem errorhandler lange nicht nachvollziehen konnte.

                          Als ich die "include" Zeile rausgenommen hab, lief dann auch "test.php" ...

                          Ich werde wohl ein File_Prefix einführen müssen, damit sowas nicht wieder vorkommt.

                          Vielen Dank für Eure Hinweise und sorry wegen solch eines Fehler ... Anfänger halt
                          Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

                          Kommentar


                          • #14
                            Als ich die "include" Zeile rausgenommen hab, lief dann auch "test.php" ...
                            Dann hätte aber include_once schon alle Probleme behoben, nehme ich mal an!
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Wobei man sich bei so if-class_exists- oder include_once-Lösungen dann schon fragen sollte, ob man das jetzt macht, weil es sinnvoll ist oder weil man die Kontrolle über den eigenen Code verloren hat.

                              Kommentar

                              Lädt...
                              X