Laravel和魔术方法


Laravel元素不多

这是什么文章マジックメソッド?我应该在何时何地使用它?以上是使用实际示例的总结。
请指出任何错误。

什么是魔术方法?

以下函数名称__construct()__destruct()__call()__callStatic()__get()__set()__isset()__unset()__sleep()__wakeup()__serialize()__unserialize()__toString()__invoke()__set_state()__clone()__debugInfo()是PHP类中特殊功能的名称。除非要使用与这些功能相关的特殊功能,否则不要在您的类中使用这些名称创建功能。
所有魔术方法都必须声明为公共
PHP保留以__开头的函数名称作为特殊功能。如果不需要任何特殊功能,则不应以__开头函数名称。
参考:https://www.php.net/manual/ja/language.oop5.magic.php

如上所述,它是一个特殊功能。
这是在每个类的某个特定时间调用的函数。
请检查公式以查看何时将其称为

有很多,所以我将通过实际示例介绍其中一些

1 .__ construct()

每次创建新对象时,具有

构造函数方法的类都将调用此方法。这使您可以在使用对象之前进行必要的初始化。

如上所述,将在执行new时执行。

示例

sample_construct.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

class Baby
{
    public $birthDay;
    public function __construct()
    {
        $this->birthDay = date('Y-m-d H:i:s');
    }
}

$baby = new Baby();
echo $baby->birthDay; // 現在の日時が出力される

Laravel中的示例

如果在路由中指定了UserController中的方法,则将创建对象。
适用于多种方法中使用的DI或中间件适配

用户控制器

1
2
3
4
5
6
7
8
9
10
11
12
class UserController extends Controller
{
    public $service;
    public function __construct(\App\Services\UserService $service)
    {
        $this->middleware('auth');

        $this->middleware('log')->only('index');

        $this->service = $service;
    }
}

2. __destruct()

当没有对特定对象的引用时,将调用

析构函数方法。或者,将在脚本末尾无序调用它们。

如上所述,它将在对象被销毁或脚本完成时执行。
如果使用exit()停止脚本执行,则也会调用析构函数。

似乎文件的指针已打开和关闭,并在Guzzle,CurlHttpClient等中使用。

sample_destruct.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

class SampleFileOpen
{
    public $handle;
    public function __construct($user,$pass)
    {
        // ファイル開く
        $this->handle = fopen('somefile.txt', 'r');
    }

    public function __destruct()
    {
        fclose($handle);
    }
}

$file = new SampleFileOpen();
echo fgets($file->handle); //1行目が表示

// スクリプト終了したので、ファイルが自動で閉じられる

3. __call(),__callStatic

__call()

在对象的上下文中执行不可访问的方法时调用
参数 n a m e