views:

387

answers:

3

I have created a PHP class called formChecker.php. It validates a form. As a Java programmer, I would like to stick with the idea of creating an instance of this class in another class and run it from there. It doesn't seem to be working for me.The following is a demonstration:

class formChecker{

  ..... validation functions go here

}

class runFormChecker{

....  create instance of formchecker here and use it's methods etc.

}

Can this be done? What I'm thinking of is developing a number of classes that can be run seperately.

GF

A: 

Yes, and this is not strange. You would usually create the instance of formChecker within an instance of runFormChecker though, and not at the class level.

Ignacio Vazquez-Abrams
+1  A: 

Just include the formChecker class file just before the class you want to use it in eg:

include "formChecker.php"

class runFormChecker{

     function __construct() {
      $obj = new formChecker;  // create instance
      // more processing............
     }  
}

If however, you have both classes in one file (which is bad), then no need to include the file, you can create the instance of that straight away eg:

class formChecker{
  // ............
}

class runFormChecker{

     function __construct() {
      $obj = new formChecker;  // create instance
      // more processing............
     }  
}

More Information Here....

Thanks :)

Sarfraz
Isn't it bad to "include" the file also? Isn't this the same thing as having both classes in one file?
@grungefreak1:how is this bad? if you put classes in its own files and include them in one other file, they will be one again but in running script only but outside the app, they remain in their own files which makes easier to maintain them.
Sarfraz
@sarfraz. Point taken. However, I will go with the process of passing one object into another's constructor as it is more in line with my OOP ideas.GF
+4  A: 

I'd rather pass the instance of formChecker (or something that implements a certain interface) to the instance of runFormChecker. see http://en.wikipedia.org/wiki/Dependency_injection

Could be as simple as

interface FormChecker {
  public function foo($x);
}

class MyFormChecker implements FormChecker
  public function foo($x) {
    return true;
  }
}

class RunFormChecker {
  protected $formChecker=null;
  public function __construct(FormChecker $fc) {
    $this->formChecker = $fc;
  }

  // ....
}

$rfc = new RunFormChecker(new MyFormChecker);
VolkerK
Yes. This is the preferable option for me. Similar to what I'm used to.Thank you.