假设,我有一个具有许多函数来访问mysql数据库的类,并且在该类中,有许多方法使用
function one(){
try{
...
}catch(PDOException $e){
return $e->getMessage()
}
}
现在,由于我有近 10 种方法应用相同的异常,我想知道是否有任何其他方法可以对所有方法只执行一次,而不是一遍又一遍地重复相同的过程。
显然,我可以在实例化类时执行此操作,
喜欢
$Object = new foo();
try{
echo $Object->methodFoo();
}catch(PDOException $e){
return $e->getMessage()
}
但是,这不是我想要的。
如果有任何其他聪明的方法可以做到这一点,那就太好了。
我敢肯定有数百万个性能原因不这样做,但理论上至少你可以通过将它们设为私有来隐藏所有方法,然后使用重载__call()
调用它们与其中的try { } catch { }
块。
像这样的东西可能是:
class TheClass
{
public function __call($name, $arguments) {
$result= null;
try {
$result= $this->$name($arguments);
}
catch (Exception $ex) {
echo "Ooops: ".$ex->getMessage();
}
return $result;
}
private function one() {
return 'hello';
}
private function two() {
// Intentional error
throw new Exception('Don''t call two!');
}
}
$foo= new TheClass();
echo $foo->one();
echo $foo->two();
编辑 查看 hendr1x 的建议 - 将所有实际的 PDO 代码移动到一个函数中并放入其中可能是一个更好的答案!