【问题标题】:Classname besides a variable in PHP除了 PHP 中的变量之外的类名
【发布时间】:2016-12-16 15:33:04
【问题描述】:

PHP这个我看不懂,函数括号里面有一个类名和一个变量,有时可以有多个用逗号分隔,然后所有的类公共方法都可以使用变量与类相关联。

        Schema::create('news_feeds', /*Here*/ function (Blueprint $table)/*To Here*/ {
            $table->increments('id');
            $table->string('title');
            $table->text('content');
            $table->string('date');
            $table->timestamps();
        });

这段代码来自一个 laravel 脚本,

我正在尝试搜索它是如何工作的,但我不知道它叫什么,那么这种在 PHP 中调用的做事方法是什么?

【问题讨论】:

标签: php function laravel class


【解决方案1】:
  Schema::create('news_feeds', function(Blueprint $table) {
//^       ^      ^             ^        ^         ^
//|       |      |             |        |         |
//|       |      |             |        |         -- 1st function param.
//|       |      |             |        -- Typehint for 1st function param.
//|       |      |             -- Second method argument
//|       |      -- First method argument
//|       --Method Name
//--Class Name
  });

您需要了解,由于您使用的是 Laravel 之类的框架,因此某些行为不属于 PHP 本身。

你看不懂的那段代码,叫anonymous function,经常用callback

在后台,Laravel 正在这样做:

  • 好的,他打电话给Schema::create,创建了一个名为news_feeds的表
  • 让我们创建一个Blueprint 对象
  • 我会将这个对象发送给用户修改。 (Laravel 在此处调用您的回调,并将蓝图作为参数)
  • 一旦callback 被执行,蓝图将被“执行”,这里的表实际上是在数据库中创建的。

如果你真的想知道这到底是怎么做的,去Illuminate\Database\Schema\Builder类,寻找create的方法。

为了让您的生活更轻松,使用 PHPStorm 之类的 IDE,您可以使用 ctrl+b 快捷方式轻松跟踪方法、类和变量...

public function create($table, Closure $callback)
{
    $blueprint = $this->createBlueprint($table);

    $blueprint->create();

    $callback($blueprint);

    $this->build($blueprint);
}

看看我告诉你的创建方法的步骤。

【讨论】:

  • 这正是我需要看到的继续非常感谢你
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2016-06-24
  • 1970-01-01
  • 2013-08-31
  • 2018-08-07
相关资源
最近更新 更多