在下面的例子中,我不能很容易地通过搜索get
文件找到get() of Book class
被调用的地方。
因为存在大量不属于Book class
的get
。
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();
当我使用非静态方法时,我如何容易地找到调用它们的地方?
或者尽可能使用函数或静态方法而不是非静态方法更好吗?
您总是可以临时将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