Preprocessing PHP Code with GCC
CCPP is a C compatible preprocessor for PHP. It might be useful when you migrate old PHP4 codes to PHP5 with keepking compatibility between the versions. However, I bumped into an idea that I could just use GCC for it.
Let's test the idea.
Original Code
PHP has had exceptions since PHP5. You have to handle errors by some different way in PHP4. You can handle the difference using preprocessor directives:
#include "php_version.h" <?php function inverse($x) { if (!$x) { $message = 'Division by zero.'; #if PHP_VERSION >= 5 throw new Exception($message); #else trigger_error($message); #endif } return 1/$x; } #if PHP_VERSION < 5 function myErrorHandler($errno, $errstr, $errfile, $errline) { echo $errstr; } set_error_handler('myErrorHandler'); #endif #if PHP_VERSION >= 5 try { #endif echo inverse(5) . "\n"; echo inverse(0) . "\n"; #if PHP_VERSION >= 5 } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } #endif echo "Hello World\n"; ?>
Run gcc with some command line options like below:
$ gcc -E -P -x c original.php | cat -s > preprocessed.php
cat -s
removes redundant linefeeds generated by gcc.
PHP_VERSION == 4
<?php function inverse($x) { if (!$x) { $message = 'Division by zero.'; trigger_error($message); } return 1/$x; } function myErrorHandler($errno, $errstr, $errfile, $errline) { echo $errstr; } set_error_handler('myErrorHandler'); echo inverse(5) . "\n"; echo inverse(0) . "\n"; echo "Hello World\n"; ?>
I didn't actually run the code above (I don't have installed PHP4 interpreter), so I can't assure that the code works or not ;)
PHP_VERSION == 5
<?php function inverse($x) { if (!$x) { $message = 'Division by zero.'; throw new Exception($message); } return 1/$x; } try { echo inverse(5) . "\n"; echo inverse(0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } echo "Hello World\n"; ?>