Как передать объект json методу, который имеет типизированный параметр в PHP 7.1.x - PullRequest
0 голосов
/ 08 июня 2019

У меня есть файл PHP, который будет получать данные POST.Кроме того, у меня есть функция, которая имеет типизированный параметр.Если я передаю данные POST этой функции, она выдает FATAL ERROR.

Я изобразил сценарий в простом коде, чтобы воспроизвести проблему.

<?php

class User
{
    public $id;
    public $name;
}

$data = file_get_contents("php://input");
$param = json_decode($data);

function printData(Phone $var)
{
    echo($var);
}

printData($param);

Я выполнил вышеупомянутый скрипт, используя POSTMANсо следующим объектом тела

{
    "id":1,
    "name":"jhon"
}

Я получаю следующую ошибку

[08-Jun-2019 01:43:51 UTC] PHP Fatal error:  Uncaught TypeError: Argument 1 passed to printData() must be an instance of User, instance of stdClass given, called in /home/bala/server/test/test.php on line 17 and defined in /home/bala/server/test/test.php:12
Stack trace:
#0 /home/bala/server/test/test.php(17): printData(Object(stdClass))
#1 {main}
  thrown in /home/bala/server/test/test.php on line 12

Как я могу передать объект этой функции со строгим типом?пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 08 июня 2019
    function printData(Phone $var)

В этой строке указывается, что параметр $var должен быть экземпляром класса Phone. Однако json_decode() ничего не знает о конкретных классах и просто декодирует вещи в экземпляр общего класса stdClass.

Вам нужно либо создать экземпляр Phone, используя значения в $param, либо изменить параметр $var в сигнатуре printData(), чтобы он не требовал экземпляра Phone для быть переданным в; например, function printData($var).

...