如何找到调用非静态方法的位置


How to find places where a non-static method is called?

在下面的例子中,我不能很容易地通过搜索get文件找到get() of Book class被调用的地方。
因为存在大量不属于Book classget

class Book {
  function get() {
  }
}
class Pen {
  function get() {
  }
}
$obj = new Pen;
$obj->get();
$obj = new Book;
$obj->get();

但是如果我只使用函数或静态方法,就像下面的代码一样,我可以通过搜索Book_getBook::get的文件轻松找到这些地方。
如果我使用函数,我可以找到where the function is calledwhere the function is defined只搜索Book_get

function Book_get() {
}
function Pen_get() {
}
Book_get();
Pen_get();


class Book {
  static function get() {
  }
}
class Pen {
  static function get() {
  }
}
Book::get();
Pen::get();

当我使用非静态方法时,我如何容易地找到调用它们的地方?
或者尽可能使用函数或静态方法而不是非静态方法更好吗?

您总是可以临时将get重命名为xget之类的东西,并重新构建以找到调用点

当我使用非静态方法时,我如何轻松找到调用它们的地方?

类成员函数可以通过多种方式调用,
通过类的实例通过多态行为(动态调度)

对于第一种情况,任何相当好的代码分析工具或IDE都能够根据对象的类型告诉您从哪个类调用函数,但是我想,如果不检查代码,就没有简单的方法可以跟踪第二种情况,我怀疑任何代码分析工具都足够智能,无法准确地告诉您正在调用哪个类方法(Source Insight肯定不会),因为分派是动态的,而不是编译时的。

使用函数或静态方法比使用非静态方法更好吗?

使用或不使用static method需要更深入的思考,而不仅仅是能够在搜索中找到函数。
静态函数没有this指针,所以你不能访问它里面的非静态成员。它们只能操作类的静态成员

切换到更好的IDE是最简单的解决方案。例如,Eclipse CDT允许您查看调用者层次结构并查找方法的所有调用站点。(尽管,模板和继承的高级案例可能仍然难以计算)

如果您的方法需要访问this->中的数据,那么您必须使其成为非静态方法。然后对象需要被实例化(通过new)。

如果你的方法使用的都是包含在函数参数中的数据,那么考虑将你的方法设置为静态。或者创建一个单独的类,只有静态方法。

Book::get();
Pen::get(); this will be the best to use in nonstatic