Как Laravel динамически вызывает метод класса статически без неявного использования ключевого слова stati c для метода в PHP? - PullRequest
0 голосов
/ 02 марта 2020

Laravel позволяет вызывать метод класса с помощью оператора разрешения области видимости (: :) без статического объявления метода.

В PHP вы можете вызывать методы stati c только тогда, когда они объявлены как таковые, например:

class User {

   public static function getAge() { ... } 

}

Может вызываться как User::getAge();

Как это можно сделать в обычном PHP классе. Я думаю, чтобы это было возможно, это должно быть сделано с использованием шаблона проектирования или чего-то еще. Кто-нибудь может мне помочь?

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

class Student {

     public function examScore($mark_one, $mark_two) {
         //some code here
     }

}

Как получить к ней доступ таким образом

$student = new Student;
$student::examScore(20, 40);

И я говорил о Laravel, потому что она позволяет создавать псевдонимы для ваших классов и вызывать это таким образом Student::examScore(20,40);

То, что называется фасадным рисунком или около того. Может помочь объяснение с примером.

После долгих поисков я нашел статью, которая вроде бы объясняет это здесь:

https://www.sitepoint.com/how-laravel-facades-work-and-how-to-use-them-elsewhere

1 Ответ

2 голосов
/ 02 марта 2020

Я предполагаю, что ваш класс User фактически расширяет класс Laravel Model.

Этот класс реализует некоторые из PHP-методов так называемых magi c. Вы можете найти наши о них здесь: https://www.php.net/manual/en/language.oop5.magic.php

Одним из них является __callStatic.

In Model.php:

/**
 * Handle dynamic static method calls into the method.
 *
 * @param  string  $method
 * @param  array  $parameters
 * @return mixed
 */
public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
...