- class_exists: documentation ( source)
<?php
interface Mailer {}
class SwiftAdapter implements Mailer {}
class ZendAdapter implements Mailer {}
class NativeAdapter implements Mailer {}
class MailerFactory
{
/**
* Select the best available mailer
*
* @return Mailer
*/
public function select()
{
if (class_exists('SwiftMailer')) { // or whatever, cba looking up actual class names
return $this->createSwiftAdapter();
} else if (class_exists('Zend_Mail')) {
return $this->createZendAdapter();
} else {
return $this->createNativeAdapter();
}
}
/**
* Explicitly create a Swift adapter
*
* @return SwiftAdapter
*/
public function createSwiftAdapter()
{
return new SwiftAdapter; // can deal with args here if needed
}
/**
* Explicitly create a Zend adapter
*
* @return ZendAdapter
*/
public function createZendAdapter()
{
return new ZendAdapter; // can deal with args here if needed
}
/**
* Explicitly create a native adapter
*
* @return NativeAdapter
*/
public function createNativeAdapter()
{
return new NativeAdapter; // can deal with args here if needed
}
}