aop - PHP类中在所有方法被调用前执行一段代码
本文介绍了aop - PHP类中在所有方法被调用前执行一段代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
如下代码:
class ActivityController extends Controller
{
public function actionDzp() {
$this->checkAccess();
}
public function actionShake() {
$this->checkAccess();
}
public function actionDraw(){
$this->checkAccess();
}
private function checkAccess(){
// some validation code ...
}
ActivityController中有3个需要在被调用前执行权限校验的公开方法,所以我抽取了一个私有的checkAccess供调用.
PHP中有没有办法以无侵入的方式,在所有类的方法成员被调用前执行一段代码?而非像上面这种方式显式地调用了多次$this->checkAccess();
以AOP的方式? 还是PHP面向对象的语法中本身就有支持这种功能的魔术方法?
谢谢!
解决方案
如果你的框架在支持Controller::__call()方法的话,就可以这么干
<?php
class Controller {
public function __call($method, $args) {
$this->checkAccess();
return call_user_func_array([$this, $method], $args);
}
protected function actionFoo() {}
protected function actionBar() {}
public function actionBaz() {}
}
actionFoo和actionBar被声明为protected,所以调用的时候就触发__call()
actionBaz是public,就不会触发__call()
这篇关于aop - PHP类中在所有方法被调用前执行一段代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文