При работе со статическими методами вы можете думать о них как о библиотеках, где имя класса становится именем библиотеки. Вы указываете компилятору, какой метод bar () запускать, указав имя библиотеки (класса). Foo.bar()
против Bar.bar()
.
У самого метода нет родителя и экземпляра, поэтому он не может использовать отражение, чтобы узнать, к какому классу он принадлежит. Однако вы можете добавить метод отражения.
Вы можете добавить статический метод к классу, который отвечает сам себе, в каком классе он находится:
public class Foo {
private static class self() {
return Foo.class;
}
public static void doStuff()
{
// Use self() to reference the Foo class
}
}
Обратите внимание, что я сделал метод self () закрытым, потому что вне класса он не имеет смысла.
Это работает, потому что метод self () виден внутри класса и внутри статического метода.
Напротив, PHP имеет конструкцию self
для ссылки на текущий класс.