【问题标题】:How to find places where a non-static method is called?如何找到调用非静态方法的地方?
【发布时间】:2011-07-14 04:33:16
【问题描述】:

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

class Book {
  function get() {
  }
}

class Pen {
  function get() {
  }
}

$obj = new Pen;
$obj->get();

$obj = new Book;
$obj->get();

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

function Book_get() {
}

function Pen_get() {
}

Book_get();
Pen_get();


class Book {
  static function get() {
  }
}

class Pen {
  static function get() {
  }
}

Book::get();
Pen::get();

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

【问题讨论】:

  • 您使用的是 IDE 吗?如果有,是哪一个?还有,这和php有什么关系?
  • @Ted Hopp 我不使用 IDE。我只使用文本编辑器。我应该使用IDE吗?在像c++这样需要编译的语言中,如果方法调用错误,编译时就会出错。但是在php等脚本语言中,发布后运行时可能会出现错误。所以对于php来说这是一个更严重的问题。但当然,这与所有语言有关。
  • 把get()的名字改成oldGet()。重新编译,编译器会告诉你它是否中断。这些是使用 get() 的位置

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


【解决方案1】:

您可以随时将 get 临时重命名为 xget 之类的名称,然后重新构建以找到调用点。

【讨论】:

    【解决方案2】:

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

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

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

    尽可能使用函数还是静态方法而不是非静态方法更好?

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 2013-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多