Tuesday 23 August 2011 8:50:04 am
» Back to Roadmap
Description
eZ 4.4 has to be used with PHP 5.2 at least. With the major version 5.3, namespaces became available in PHP. Unfortunatly we can't use them in eZ Publish.
Whether eZ Core classes use namespaces or not, developpers can't also use them whereas there isn't much to do to make namespaces available.
We only need to add few lines in the file 'kernel/private/classes/ezautoloadgenerator.php'. Using the php function token_get_all provides an array with parsed elements of the file.
For a namespace, PHP use the constant T_NAMESPACE. To ensure that our code is compatible in PHP 5.2, we need to define the constant in that version. To do such thing, we only need to add line 436 the following code :
$a
ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $this->setStatArray( self::OUTPUT_PROGRESS_PHASE2, $statArray );ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $this->startProgressOutput( self::OUTPUT_PROGRESS_PHASE2 );
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $aPhpVersion = explode('.', phpversion());
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ if ($aPhpVersion[1] 3)+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ {+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ !defined('T_NAMESPACE') && define('T_NAMESPACE', 377);+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ }
ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ foreach( $fileList as $file )
For each file we set a namespace variable to an empty string :
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $sNameSpace = '';ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $tokens = @token_get_all( file_get_contents( $file ) );
Then we get the namespace in the switch
ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ switch( $token[0] )
ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ {
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ case T_NAMESPACE:
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $sNameSpace = '';
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ for ($i = $key+2; $i count($tokens)-1; $i++)
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ {
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ if (is_array($tokens[$i]) && T_STRING == $tokens[$i][0])
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ {
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $sNameSpace .= $tokens[$i][1].'\\';
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ }
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ else if (!is_array($tokens[$i]) && in_array($tokens[$i], array(';', '{')))
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ {
+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ break;+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ }+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ }+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ break;
And finally we add the namespace before the class name, the autoload function will automaticly load the class
-ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $className = $tokens[$key+2][1];+ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ ÂÂÂÂ $className = $sNameSpace.$tokens[$key+2][1];
What do you think about it ?