我通常尽量避免使用PHP的魔术方法,因为它们似乎混淆了对象的公共接口。也就是说,它们似乎越来越多地被使用,至少在我读过的代码中是这样,所以我不得不问:在什么时候使用它们有什么共识吗?使用这三种神奇方法有什么共同的模式吗?
发布于 2011-05-12 23:19:14
一种常见的模式是为客户端提供单个句柄,并根据命名约定或配置将调用代理到封装的对象或单例。
class db
{
static private $instance = null;
static public function getInstance()
{
if( self::$instance == NULL )
self::$instance = new db;
return self::$instance;
}
function fetch()
{
echo "I'm fetching\n";
}
}
class dataHandler
{
function __call($name, $argv)
{
if( substr($name, 0, 4) == 'data' )
{
$fn = substr($name, 4);
db::getInstance()->$fn($argv);
}
}
}
$dh = new dataHandler;
$dh->datafetch('foo', 'bar');可以使用相同的原则来驱动相同功能的不同后端,而不必更改驱动程序。
https://stackoverflow.com/questions/5979830
复制相似问题