 <p>If one class is specifically designed for validation purposes and another class is designed to contain instance-specific information, then there are three different approaches you can take.</p> <p><b>1) Statically reference the validator (<i>recommended</i>):</b></p> <pre><code>&lt;?php class Validation { public static function validateEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } } class AccountManagement { public $email; public function __construct($email) { $this-&gt;email = $email; // Validate the e-mail. If not valid, an exception is thrown. if(!Validation::validateEmail($this-&gt;email)) { throw new InvalidArgumentException('$email argument supplied must contain a valid e-mail address'); } } } </code></pre> <p><b>2) Extend your instance class to inherit from your validation class</b></p> <pre><code>&lt;?php class Validation { public function validateEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } } class AccountManagement extends Validation { public $email; public function __construct($email) { $this-&gt;email = $email; // Validate the e-mail. If not valid, an exception is thrown. if(!$this-&gt;validateEmail($this-&gt;email)) { throw new InvalidArgumentException('$email argument supplied must contain a valid e-mail address'); } } } </code></pre> <p><b>3) Instantiate your validation class from within your instance class (NOT RECOMMENDED):</b></p> <pre><code>&lt;?php class Validation { public function validateEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } } class AccountManagement extends Validation { public $email; public function __construct($email) { $this-&gt;email = $email; $validator = new Validation; // Validate the e-mail. If not valid, an exception is thrown. if(!$validator-&gt;validateEmail($this-&gt;email)) { throw new InvalidArgumentException('$email argument supplied must contain a valid e-mail address'); } } } </code></pre> <p><b>Testing your implementation</b></p> <p>Once you've chosen the method which best fits your needs (regardless of which one you choose), you can test it with the following code:</p> <pre><code>// Valid, should not throw an exception and should print success. try { $account = New AccountManagement('me@myself.com'); print "AccountManagement object successfully instantiated.&lt;br /&gt;\r\n"; } catch(Exception $e) { print 'Error: Encountered ' . $e; } // Invalid, should throw an InvalidArgumentException exception try { $account = New AccountManagement('myself.com'); print "AccountManagement object successfully instantiated.&lt;br /&gt;\r\n"; } catch(Exception $e) { print 'Error: Encountered ' . $e; } </code></pre> <p><b>Bonus Example:</b></p> <p>Sometimes, you may want to specifically catch Validation errors, and let something take care of any other exceptions which may be encountered. In this case, we can create a special exception just for our validator, and allow the validator to be the one to throw the exception:</p> <pre><code>&lt;?php class ValidationException extends Exception { // Will use default Exception behavior. } class Validation { public static function validateEmail($email) { if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new ValidationException('E-mail address supplied is not valid'); } } } class AccountManagement { public $email; public function __construct($email) { $this-&gt;email = $email; // Validate the e-mail. Validation::validateEmail($this-&gt;email); } } // Valid, should not throw an exception and should print success. try { $account = New AccountManagement('me@myself.com'); print "AccountManagement object successfully instantiated.&lt;br /&gt;\r\n"; } catch(Exception $e) { print 'Error: Encountered ' . $e; } // Invalid, should throw an ValidationException exception try { $account = New AccountManagement('myself.com'); print "AccountManagement object successfully instantiated.&lt;br /&gt;\r\n"; } catch(ValidationException $e) { print 'Error: Encountered ' . $e; } </code></pre>