Re: Re: question regarding Reflection

From: Date: Thu, 03 Nov 2005 10:02:40 +0000
Subject: Re: Re: question regarding Reflection
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-225036@lists.php.net to get a copy of this message
4 things you need to look into: 1. is_file() and is_readable() 2. $argv (contains what was passed along with the cmdline) 3. __autoload() 4. include_path (.ini setting) I trust that you capable of STFW and RTFM well enough to take those 4 and make a start at creating something that resembles 'class loading functionality'? Manish Marathe wrote:
On 11/1/05, Curt Zirzow <czirzow@gmail.com> wrote:
On Tue, 01 Nov 2005 14:31:12 -0800, Manish Marathe wrote:
... My question is to use the Reflection API, I need to import the original class for which I am generating tests. For example to generate a tests
for
class Company which is in Company.php: include_once('company.php'); $c = new ReflectionClass('Company'); If I have to generate test for many classes at once, it would be foolish to have them included in my file on the runtime. Am I understanding it correctly ?
Yes you are understanding correctly. You can avoid this issue by using the pcntl[1] tools available in php (assuming this is a *nix environment.) A simple usage would be something like: <?php $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else if ($pid) { // we are the parent pcntl_wait($status); //Protect against Zombie children echo 'Class is defined: '; var_dump(class_exists('foobar', false)); } else { // we are the child // create a class to see if the parent sees it class foobar { } // do your Unit testing.. }
The parent process would just iterate through all the class files
you need to include and fork a child. Then you can include the file in the child process run your unit test and then exit. I use this method for any sort of long lasting script that causes a lot of memory or resource usage.
Wow, this certainly helps when we actually run the unit tests and I didn't think of this earlier so my next question has been already answered by you I guess if I understand you. My current problem is this: Below is some chunk of the scrip I am writing to generate test code. include_once "Company.php"; class TestGenerator { public function TestGenerator() { } public function catchReflection() { $classInfo = new ReflectionClass('Company'); // Below here I will be getting all the information about the class "Company" and then I will be generating a test class CompanyTest which resides in the file CompanyTest.php. } } So in this script of mine I have included the Company.php above because the statement $classInfo = new ReflectionClass('Company'); uses it. Now this is just an example I have taken to see how my generator works. The user would use the TestGenerator something like this: php TestGenerator.php myClass Now is there a way that in my script I can let PHP look for a file myClass.php or for that matter any php file that has myClass so that I don't have to include it, as it is totally upto the user which file its gonna pass to the TestGenerator.php script to generate the test code and I cannot statically include that in my file. I believe this time I have stated my problem clearer, earlier I did not, I apologize. Thank You Manish Marathe SpikeSource, Inc. http://developer.spikesource.com


« previous php.general (#225036) next »