Is there any way in PHP to read a php source file which contains one or more classes and then create a prototype class (similar to interface)
Original class looks like this:
class Math {
private $a;
private $b;
public function set_a($a) {
$this -> a = $a;
}
public function set_b($b) {
$this -> b = $b;
}
public function sum() {
return $a + $b;
}
}
The prototype file must look like this:
class Math {
public function set_a($a) { }
public function set_b($b) { }
public function sum() { }
}
I want to do this dynamically by reading the class files at runtime and generating prototype classes. Is there any library in PHP through which I can read class meta information from file without including.
EDIT: I need to create a PHP file listing all prototype classes. The reason is that I have created a PHAR file for my library. And whenever I need to use any code from within the PHAR file i just include it using the following syntax.
require_once("phar://mylibrary.phar/math.php");
But the problem is that the code hints and intelli-sense does not work. I am using zend studio. So I thought, if I create a single file with all prototype classes and then include into new project then code hinting will work.
If your coding style guarantees that you'll never break the arguments of a function declaration over multiple lines, you can hack a prototype generator pretty easily by selecting lines that match the following patterns (and correcting the braces as needed):
/^class /
/^}/
/^\s*(\w+)?\s*function\b/ # Must append a closing } to each line matching this
You could rig a PHP script to do all this, but if you've got the Unix tools in your environment, the above is a few characters away from being a complete sed script.
Here it is embedded in a PHP script, as requested (not tested):
$fp = fopen("source.php");
while (($line = fgets($fp)) !== false) {
if (preg_match("/^class |^}/", $line))
print $line;
elif (preg_match('/^\s*(\w+)?\s*function\b/', $line))
print rtrim($line) . " }
";
}
Adapt/extend as needed for your coding style.