如何从使用来自不同命名空间的 class 的命令行执行 php 文件?

How can I execute a php file from command line which uses class from different namespace?

我正在尝试创建一个文件,您可以从命令行执行该文件以在数据库中创建表。问题是,该文件使用来自不同命名空间的 class,所以当我尝试 运行 php migrations.php 时,我得到 Fatal error: Uncaught Error: Class "Core\Database\Database" not found in C:\Users\user\Desktop\app\migrations.php:6.

我正在使用 composer 的自动加载器,我对其他文件没有任何问题 - 只有当我尝试从命令行执行提到的文件时才会发生这种情况。

我可以通过要求包含所用 class 的文件来解决它,但是我在另一个文件中得到了同样的错误,因为另一个文件也使用了来自不同命名空间的 classes .

migrations.php

<?php

use Core\Database\Database;

Database::query("CREATE TABLE real_estates(
    id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    city_id INT(11) NOT NULL,
    area INT(11) NOT NULL,
    price INT(11) NOT NULL,
    description TEXT NOT NULL,
    CONSTRAINT `fk_real_estate_city`
        FOREIGN KEY (city_id) REFERENCES cities (id)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT
)");

Database::query("CREATE TABLE cities(
    id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
)");

composer.json

{
  "autoload": {
    "classmap": [
      "./"
    ]
  },
  "require": {
    "ext-pdo": "*"
  }
}

您需要手动 require 作曲家的自动加载文件,这通常由您的网络应用程序完成。

require_once  pathOfComposerAutoloadFile.php

创建一个 autoload.php 并在此文件中包含所有必需的文件,例如....

include(__DIR__ . 'yourfile.php');

在您的 migration.php 文件中使用此 autoload.php。 现在您可以从 url 或命令行 运行 migration.php。