Пространства имен PHP - непосредственно инициировать новый объект или функцию вызова?

Я новичок в PHP, и я пытаюсь изучить пространство имен на разумном уровне.

Я обнаружил, что могу использовать функцию из другого класса, выполняя следующие действия:

use Sonic\queries\projects;

$test = new projects();

$project = $test->getSingleProject($projectid);

Однако я также могу получить доступ к функции, просто выполнив следующие действия:

$project = Sonic\queries\projects::getSingleProject($projectid);

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

3 ответа

Они не одинаковы. Использование нотации $this->projectname :: вызывает статический метод, что означает, что метод не может получить доступ к переменным экземпляра класса (например, $this->projectname). Если метод не использует переменные экземпляра, то, скорее всего, он должен был быть определен как статический метод для начала.

class projects {
 public static getSingleProject($projectid) {
 // function body
 }
}

Документация PHP по static методам...


Я бы рекомендовал вам придерживаться первого пути. Статические функции и переменные вводят форму глобального состояния.

Здесь вы можете воспользоваться материалами:


Вызывающие projects::getSingleProject($projectid) даже если он не объявлен static будет по-прежнему действительным в php. Вы получите сообщение об ошибке, если метод использует $this но в вашем случае похоже, что это то, что происходит. Вероятно, он не был объявлен статичным, и поэтому его нельзя использовать статически.

licensed under cc by-sa 3.0 with attribution.