Допустимая фатальная ошибка: аргумент 1 прошел

-4

Я пишу этот код:

index.php:

(Мой индекс)

<?php

namespace com;

$loader = require __DIR__ . '/../vendor/autoload.php';
$loader->add(__NAMESPACE__, __DIR__ . '/../../');
$loader->register();

$config = require __DIR__ . "/../config/mainConfig.php";
new framework\com($config);

рамки\ком:

(Основной класс My Framework. Этот класс получает конфигурацию)

<?php

namespace com\framework;

use com\framework\DTO\IConfig;

class com {
/**
* @var IConfig
*/
private $config;

/**
* @param IConfig $config
*/
public function __construct(IConfig $config)
{

$this->config = $config;
}
}

ком\рамки\DTO\IConfig:

(Передача данных)

<?php

namespace com\framework\DTO;

class IConfig {
/** @var string */
public $projectName;

/** @var string */
public $projectDescription;

/** @var string */
public $projectAuthor;

/** @var array */
public $sqlConnectionVariables = array("user", "pass", "options", "connectionString");
}

конфиг /mainConfig.php:

(Моя основная конфигурация)

<?php

namespace com\config;

class mainConfig {
/** @var string */
public $projectName = "example";

/** @var string */
public $projectDescription = "example";

/** @var string */
public $projectAuthor = "example";

/** @var array */
public $sqlConnectionVariables = [
"user" => "root",
"pass" => "",
"options" => [
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
],
"connectionString" => "mysql:host=localhost;dbname=example;charset=utf8"
];
}

Ошибка:

Catchable fatal error: Argument 1 passed to com\framework\com::__construct() must be an instance of com\framework\DTO\IConfig, integer given, called in C:\wamp\www\com\web\index.php on line 12 and defined in C:\wamp\www\com\framework\com.php on line 18

Как я могу это исправить? Мне нужно отправить "mainConfig.php" в класс "com", и он не работает.

спросил(а) 2021-01-28T01:17:24+03:00 3 месяца, 1 неделя назад
1
Решение
123

Вам нужно сделать это:

namespace com\config;

class mainConfig extends \com\framework\DTO\IConfig {
/** @var string */
public $projectName = "example";

/** @var string */
public $projectDescription = "example";

/** @var string */
public $projectAuthor = "example";

/** @var array */
public $sqlConnectionVariables = [
"user" => "root",
"pass" => "",
"options" => [
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
],
"connectionString" => "mysql:host=localhost;dbname=example;charset=utf8"
];
}

return new mainConfig();

Но я предлагаю вам использовать реальные интерфейсы в следующий раз (и синглтоны).

ответил(а) 2021-01-28T01:17:24+03:00 3 месяца, 1 неделя назад
44

Это происходит потому, что для require возвращаемое значение 1 если оно выполнено успешно.

Одно возможное исправление может выглядеть так:

require __DIR__ . "/../config/mainConfig.php";
$config = new config\mainConfig();
new framework\com($config);

Также сделайте конфигурацию расширением типа намеченного интерфейса (как сказано в комментарии sjagr):

class mainConfig extends com\framework\DTO\IConfig

А потом посмотрите, что еще не получается.

ответил(а) 2021-01-28T01:17:24+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема