Laravel 如何静态地动态调用 class 方法而不隐式使用 PHP 中方法的 static 关键字?
How does Laravel dynamically call a class method statically without implicitly using the static keyword for the method in PHP?
Laravel 可以使用范围解析运算符 (::) 调用 class 方法,而无需静态声明该方法。
在 PHP 中,您只能在声明为静态方法时调用静态方法,例如:
class User {
public static function getAge() { ... }
}
可以称为User::getAge();
如何在正常情况下完成此操作 PHP class。我想它可能需要使用设计模式或其他东西来完成。谁能帮帮我?
所以我上面的意思是可以实例化一个 class 并在 php 中静态调用它的方法。由于该功能已从以前的版本中删除
class Student {
public function examScore($mark_one, $mark_two) {
//some code here
}
}
如何以这种方式访问它
$student = new Student;
$student::examScore(20, 40);
我谈到了 Laravel,因为它允许您为 class 起别名并以这种方式调用它 Student::examScore(20,40);
所谓的门面模式之类的东西。举例说明会有所帮助。
经过长时间的搜索,我在这里找到了一篇解释它的文章:
https://www.sitepoint.com/how-laravel-facades-work-and-how-to-use-them-elsewhere
我的猜测是您的用户 class 实际上扩展了 Laravel Model
class.
这个 class 实现了一些 PHP 所谓的魔法方法。你可以在这里找到我们关于他们的信息:
https://www.php.net/manual/en/language.oop5.magic.php
其中之一是 __callStatic
。
在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);
}
Laravel 可以使用范围解析运算符 (::) 调用 class 方法,而无需静态声明该方法。
在 PHP 中,您只能在声明为静态方法时调用静态方法,例如:
class User {
public static function getAge() { ... }
}
可以称为User::getAge();
如何在正常情况下完成此操作 PHP class。我想它可能需要使用设计模式或其他东西来完成。谁能帮帮我?
所以我上面的意思是可以实例化一个 class 并在 php 中静态调用它的方法。由于该功能已从以前的版本中删除
class Student {
public function examScore($mark_one, $mark_two) {
//some code here
}
}
如何以这种方式访问它
$student = new Student;
$student::examScore(20, 40);
我谈到了 Laravel,因为它允许您为 class 起别名并以这种方式调用它 Student::examScore(20,40);
所谓的门面模式之类的东西。举例说明会有所帮助。
经过长时间的搜索,我在这里找到了一篇解释它的文章:
https://www.sitepoint.com/how-laravel-facades-work-and-how-to-use-them-elsewhere
我的猜测是您的用户 class 实际上扩展了 Laravel Model
class.
这个 class 实现了一些 PHP 所谓的魔法方法。你可以在这里找到我们关于他们的信息: https://www.php.net/manual/en/language.oop5.magic.php
其中之一是 __callStatic
。
在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);
}