Как найти места, где вызывается нестатический метод? - PullRequest
0 голосов
/ 14 июля 2011

В следующем примере я не могу легко найти места, где 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();

КогдаЯ использую нестатические методы, как я могу легко найти места, где они вызываются?
Или лучше использовать функции или статические методы вместо нестатических методов, насколько это возможно?

Ответы [ 4 ]

2 голосов
/ 14 июля 2011

Вы всегда можете временно переименовать get во что-то вроде xget и перестроить, чтобы найти точки вызова.

1 голос
/ 14 июля 2011

Когда я использую нестатические методы, как я могу легко найти места, где они вызываются?

Функция-член класса может быть вызвана вчисло путей,
Через экземпляр класса
Через полиморфное поведение (динамическая диспетчеризация)

Для первого случая - любой достаточно хороший инструмент анализа кода илиIDE сможет сообщить вам класс, из которого вызывается функция, в зависимости от типа объекта, но я думаю, что нет простого способа отследить второй случай без изучения кода, я сомневаюсь, что какой-либо из инструментов анализа кодадостаточно умен, чтобы точно сказать, какой метод класса вызывается (конечно, Source Insight этого не делает), потому что отправка динамическая, а не время компиляции.

Лучше использовать функции или статические методывместо нестатических методов насколько это возможно?

Чтобы использовать или не использовать static method, требуется гораздо более глубокая мысль, чем просто возможность найти функции в видеearch.
Статические функции не имеют указателя this, поэтому вы не можете получить доступ к нестатическим членам внутри них. Они могут работать только со статическими членами класса.

1 голос
/ 14 июля 2011

Если вашему методу требуется доступ к данным в this->, то вы должны сделать его нестатическим методом.Затем необходимо создать экземпляр объекта (через new).

Если все, что использует ваш метод, это данные, содержащиеся в параметрах функции, то подумайте о том, чтобы сделать ваш метод статичным.Или создайте отдельный класс только со статическими методами.

Book::get();
Pen::get(); this will be the best to use in nonstatic
1 голос
/ 14 июля 2011

Переключение на более качественную среду разработки - самое простое решение. Eclipse CDT, например, позволяет вам просматривать иерархию вызывающих и находить все сайты вызовов метода. (Хотя сложные случаи шаблонов и наследования могут все еще затруднять понимание)

...