gpt4 book ai didi

php - Laravel 中的魔法方法

转载 作者:行者123 更新时间:2023-12-05 08:53:45 26 4
gpt4 key购买 nike

所以我最近意识到,而不是使用

$users = User::all();
return view('home')->with('users', $users);

你能做到

return view('home')->withUsers($users);

我相信这些被称为“魔法方法”——这些在某处有记录吗?有我能找到的列表还是唯一的?

最佳答案

Laravel 允许您以方便的方式传递数据,但它们不是魔术方法Magic Methods是 PHP 类中一组选定方法的名称,通常以双下划线 __ 开头,每个方法都有自己的用途。魔术方法的例子是 __call , __callStatic , __toString

Laravel 使用 PHP 的魔术方法,特别是 __call 魔术方法,来提供您正在体验的功能。 __call当您尝试调用对象上不存在的方法时,PHP 会调用方法。作为其第一个参数,它接收被调用方法的名称,第二个参数接收作为数组传递给方法调用的参数。

Laravel 通过在 View 类上实现 __call 方法来利用这一点。它会检查开发者调用的方法的开头是否以with开头,如果是,它会假设方法名的后面部分代表你要绑定(bind)的变量名呈现 View 时的数据:

来自Illuminate\View\View:

/**
* Dynamically bind parameters to the view.
*
* @param string $method
* @param array $parameters
* @return \Illuminate\View\View
*
* @throws \BadMethodCallException
*/
public function __call($method, $parameters)
{
if (! Str::startsWith($method, 'with')) {
throw new BadMethodCallException("Method [$method] does not exist on view.");
}

return $this->with(Str::camel(substr($method, 4)), $parameters[0]);
}

这提供了您正在体验的功能,并且该技术实际上用于几个不同的地方,例如,在查询构建器/Eloquent 中,您可以通过简单地调用方法开始动态地将 where 子句添加到查询中使用 where 并且方法调用的其余部分指的是您正在检查的列:

User::whereEmail('foo@bar.com'); // Equal to User::where('email', 'foo@bar.com');

关于php - Laravel 中的魔法方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52918718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com