protected function cacheOriginalClassFileAndProxyCode($className, $pathAndFilename, $proxyClassCode)
    {
        $classCode = file_get_contents($pathAndFilename);
        $classCode = $this->stripOpeningPhpTag($classCode);

        $classNameSuffix = self::ORIGINAL_CLASSNAME_SUFFIX;
        $classCode = preg_replace_callback('/^([a-z\s]*?)(final\s+)?(interface|class)\s+([a-zA-Z0-9_]+)/m', function ($matches) use ($pathAndFilename, $classNameSuffix, $proxyClassCode) {
            $classNameAccordingToFileName = basename($pathAndFilename, '.php');
            if ($matches[4] !== $classNameAccordingToFileName) {
                throw new Exception('The name of the class "' . $matches[4] . '" is not the same as the filename which is "' . basename($pathAndFilename) . '". Path: ' . $pathAndFilename, 1398356897);
            }
            return $matches[1] . $matches[3] . ' ' . $matches[4] . $classNameSuffix;
        }, $classCode);

        // comment out "final" keyword, if the method is final and if it is advised (= part of the $proxyClassCode)
        // Note: Method name regex according to http://php.net/manual/en/language.oop5.basic.php
        $classCode = preg_replace_callback('/^(\s*)((public|protected)\s+)?final(\s+(public|protected))?(\s+function\s+)([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+\s*\()/m', function ($matches) use ($pathAndFilename, $classNameSuffix, $proxyClassCode) {
            // the method is not advised => don't remove the final keyword
            if (strpos($proxyClassCode, $matches[0]) === false) {
                return $matches[0];
            }
            return $matches[1] . $matches[2] . '/*final*/' . $matches[4] . $matches[6] . $matches[7];
        }, $classCode);

        $classCode = preg_replace('/\\?>[\n\s\r]*$/', '', $classCode);

        $proxyClassCode .= "\n" . '# PathAndFilename: ' . $pathAndFilename;

        $separator =
            PHP_EOL . '#' .
            PHP_EOL . '# Start of Flow generated Proxy code' .
            PHP_EOL . '#' . PHP_EOL;

        $this->classesCache->set(str_replace('\\', '_', $className), $classCode . $separator . $proxyClassCode);
    }
protected function cacheOriginalClassFileAndProxyCode($className, $pathAndFilename, $proxyClassCode)
    {
        $classCode = file_get_contents($pathAndFilename);
        $classCode = $this->stripOpeningPhpTag($classCode);

        $classNameSuffix = self::ORIGINAL_CLASSNAME_SUFFIX;
        $classCode = preg_replace_callback('/^([a-z\s]*?)(final\s+)?(interface|class)\s+([a-zA-Z0-9_]+)/m', function ($matches) use ($pathAndFilename, $classNameSuffix, $proxyClassCode) {
            $classNameAccordingToFileName = basename($pathAndFilename, '.php');
            if ($matches[4] !== $classNameAccordingToFileName) {
                throw new Exception('The name of the class "' . $matches[4] . '" is not the same as the filename which is "' . basename($pathAndFilename) . '". Path: ' . $pathAndFilename, 1398356897);
            }
            return $matches[1] . $matches[3] . ' ' . $matches[4] . $classNameSuffix;
        }, $classCode);

        // comment out "final" keyword, if the method is final and if it is advised (= part of the $proxyClassCode)
        // Note: Method name regex according to http://php.net/manual/en/language.oop5.basic.php
        $classCode = preg_replace_callback('/^(\s*)((public|protected)\s+)?final(\s+(public|protected))?(\s+function\s+)([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+\s*\()/m', function ($matches) use ($pathAndFilename, $classNameSuffix, $proxyClassCode) {
            // the method is not advised => don't remove the final keyword
            if (strpos($proxyClassCode, $matches[0]) === false) {
                return $matches[0];
            }
            return $matches[1] . $matches[2] . '/*final*/' . $matches[4] . $matches[6] . $matches[7];
        }, $classCode);

        $classCode = preg_replace('/\\?>[\n\s\r]*$/', '', $classCode);

        $proxyClassCode .= "\n" . '# PathAndFilename: ' . $pathAndFilename;

        $separator =
            PHP_EOL . '#' .
            PHP_EOL . '# Start of Flow generated Proxy code' .
            PHP_EOL . '#' . PHP_EOL;

        $this->classesCache->set(str_replace('\\', '_', $className), $classCode . $separator . $proxyClassCode);
    }
protected function cacheOriginalClassFileAndProxyCode ( $ className , $ pathAndFilename , $ proxyClassCode ) { $ classCode = file_get_contents ( $ pathAndFilename ) ; $ classCode = $ this -> stripOpeningPhpTag ( $ classCode ) ; $ classNameSuffix = self :: ORIGINAL_CLASSNAME_SUFFIX ; $ classCode = preg_replace_callback ( '/^([a-z\s]*?)(final\s+)?(interface|class)\s+([a-zA-Z0-9_]+)/m' , function ( $ matches ) use ( $ pathAndFilename , $ classNameSuffix , $ proxyClassCode ) { $ classNameAccordingToFileName = basename ( $ pathAndFilename , '.php' ) ; if ( $ matches [ 4 ] !== $ classNameAccordingToFileName ) { throw new Exception ( 'The name of the class "' . $ matches [ 4 ] . '" is not the same as the filename which is "' . basename ( $ pathAndFilename ) . '". Path: ' . $ pathAndFilename , 1398356897 ) ; } return $ matches [ 1 ] . $ matches [ 3 ] . ' ' . $ matches [ 4 ] . $ classNameSuffix ; } , $ classCode ) ; // comment out "final" keyword, if the method is final and if it is advised (= part of the $proxyClassCode) // Note: Method name regex according to http://php.net/manual/en/language.oop5.basic.php $ classCode = preg_replace_callback ( '/^(\s*)((public|protected)\s+)?final(\s+(public|protected))?(\s+function\s+)([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+\s*\()/m' , function ( $ matches ) use ( $ pathAndFilename , $ classNameSuffix , $ proxyClassCode ) { // the method is not advised => don't remove the final keyword if ( strpos ( $ proxyClassCode , $ matches [ 0 ] ) === false ) { return $ matches [ 0 ] ; } return $ matches [ 1 ] . $ matches [ 2 ] . '/*final*/' . $ matches [ 4 ] . $ matches [ 6 ] . $ matches [ 7 ] ; } , $ classCode ) ; $ classCode = preg_replace ( '/\\?>[\n\s\r]*$/' , '' , $ classCode ) ; $ proxyClassCode .= "\n" . '# PathAndFilename: ' . $ pathAndFilename ; $ separator = PHP_EOL . '#' . PHP_EOL . '# Start of Flow generated Proxy code' . PHP_EOL . '#' . PHP_EOL ; $ this -> classesCache -> set ( str_replace ( '\\' , '_' , $ className ) , $ classCode . $ separator . $ proxyClassCode ) ; }
Reads the specified class file, appends ORIGINAL_CLASSNAME_SUFFIX to its
class name and stores the result in the proxy classes cache.

@param string $className Short class name of the class to copy
@param string $pathAndFilename Full path and filename of the original class file
@param string $proxyClassCode The code that makes up the proxy class
@return void

@throws Exception If the original class filename doesn't match the actual class name inside the file.
Reads the specified class file appends ORIGINAL_CLASSNAME_SUFFIX to its class name and stores the result in the proxy classes cache .