我正在尝试跟踪对象类中过时或未使用的函数。我的一个想法是创建一个继承原始类的新类,然后在调用父代的函数时“跟踪”。检测到后,我会将父项的功能迁移到子项中,直到最终只存在必要/需要的函数。
是否有代码在PHP中自动执行此操作?这是例子。
class OldUser {
function getFullName() {
return "{$this->firstName} {$this->lastName}";
}
}
class User extends OldUser {
}
-----
$user = new User;
echo $user->getFulLName();
然后在某个地方的日志中我注意到: “{timestamp}函数getFullName()名为”
显然我可以手动添加这些日志,但如果PHP有一种现有的方式可以做到这一点,我很乐意默认这种方法。
或者,如果有更好的方法,我愿意接受建议。
谢谢!
答案 0 :(得分:2)
如果您的代码对于静态代码分析工具来说太神奇了,您应该为您的应用程序编写一些集成/功能测试并查看代码覆盖率 - 未涵盖的方法可能是死代码(或者您需要更多测试)。在此之后你不仅会有更清洁的代码,而且还有用的测试,所以两只一石二鸟。 :)
答案 1 :(得分:1)
在不必手动添加调用的情况下实现此目的的一种可能方法是使用不继承您要跟踪/记录的类的类:
围绕这些线的东西应该这样做:
class User{
private $old_user;
// use the same signature of your class constuctor here
public function __construct($arg1, $arg2, ...)
{
$this->old_user = new OldUser($arg1, $arg2, ...);
}
public function __call($name, $arguments)
{
log(sprintf("%s: function %S() called", date('Y-m-d H:i:s'), $name));
call_user_func_array([$this->old_user,$name], $arguments);
}
}
答案 2 :(得分:0)
您需要做的就是实现OldUser
的所有公共方法,并让这些调用触发日志记录,然后调用父函数。例如:
class User extends OldUser {
protected function log($method, $backtrace) {
// ...
}
public function getFullName() {
$this->log(__METHOD__, debug_backtrace());
return parent::getFullName();
}
}
debug_backtrace()
将允许您在调用函数的代码中跟踪 where 。