如何找到调用非静态方法的地方?

时间:2011-07-14 04:33:16

标签: php c++ class function static-methods

在以下示例的情况下, 通过使用get() of Book class搜索文件,我无法轻松找到get被调用的地方 因为有很多get不属于Book class

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 called搜索where the function is definedBook_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();

当我使用非静态方法时,如何轻松找到它们被调用的位置? 或者最好使用函数或静态方法而不是非静态方法?

4 个答案:

答案 0 :(得分:2)

您可以随时暂时将get重命名为xget,然后重建以找到呼叫点。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

对于第一种情况,任何相当不错的代码分析工具或IDE都能告诉你根据对象类型调用函数的类,但是 我想没有简单的方法来跟踪第二种情况而不检查代码,我怀疑任何代码分析工具都足够聪明,可以告诉你究竟调用了哪种类方法(Source Insight肯定没有),因为调度是动态不编译时间。

使用函数或静态方法代替非静态方法是否更好?

使用或不使用static method需要更深入的思考,而不仅仅是为了能够在搜索中找到功能。
静态函数没有this指针,因此您无法访问其中的非静态成员。它们只能在类的静态成员上运行。

答案 3 :(得分:1)

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

如果您的所有方法都使用的是函数参数中包含的数据,那么请考虑使您的方法保持静态。或者仅使用静态方法创建一个单独的类。

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