在以下示例的情况下,
通过使用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_get
或Book::get
搜索文件,我可以轻松找到这些地方
如果我使用函数,我只能通过where the function is called
搜索where 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();
当我使用非静态方法时,如何轻松找到它们被调用的位置? 或者最好使用函数或静态方法而不是非静态方法?
答案 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