Ошибка при передаче строки в метод с типом намека

В приведенном ниже коде я вызываю функцию (это, случается, конструктор), в котором я набираю тип. Когда я запускаю код, я получаю следующую ошибку:

Допустимая фатальная ошибка : аргумент 1 передан в вопрос :: __ construct () должен быть экземпляром строки, указанной строки, вызываемой в run.php в строке 3 и определенной в question.php в строке 15

Из того, что я могу сказать, ошибка говорит мне, что функция ожидает строку, но строка была передана. Почему он не принимает переданную строку?

run.php :

<?php require 'question.php'; $question = new Question("An Answer"); ?> 

question.php :

 <?php class Question { /** * The answer to the question. * @access private * @var string */ private $theAnswer; /** * Creates a new question with the specified answer. * @param string $anAnswer the answer to the question */ function __construct(string $anAnswer) { $this->theAnswer = $anAnswer; } } ?> 

Related of "Ошибка при передаче строки в метод с типом намека"

Просто удалите string из конструктора ( не поддерживается ), она должна работать нормально, например:

 function __construct($anAnswer) { $this->theAnswer = $anAnswer; } 

Рабочий пример:

 class Question { /** * The answer to the question. * @access private * @var string */ public $theAnswer; /** * Creates a new question with the specified answer. * @param string $anAnswer the answer to the question */ function __construct($anAnswer) { $this->theAnswer = $anAnswer; } } $question = new Question("An Answer"); echo $question->theAnswer; 

PHP не поддерживает тип намека на скалярные значения. В настоящее время это возможно только для классов, интерфейсов и массивов. В вашем случае он ожидает объект, являющийся экземпляром класса «строка».

В настоящее время существует реализация, поддерживающая это в версии SVN trunk версии PHP, но она не определилась, будет ли эта реализация выпущена в будущих версиях PHP или вообще будет поддерживаться.

Тип hinting может использоваться только для типов данных объектов (или массивов с 5.1), а не для основных типов, таких как string, integer, float, boolean

Из документации по PHP ( http://php.net/manual/en/language.oop5.typehinting.php )

Тип подсказки может быть только типа объекта и массива (начиная с PHP 5.1). Традиционный тип hinting с int и string не поддерживается.

Невозможно называть string s, int s или любой другой примитивный тип

ЗАМЕТКА

«Тип декларации» (так называемый «намек типа») доступны для следующих типов, поскольку PHP 7.0.0:

  • bool Параметр должен быть логическим значением.
  • float Параметр должен быть числом с плавающей запятой.
  • int Параметр должен быть целым числом.
  • string Параметр должен быть строкой.
  • bool Параметр должен быть логическим значением.

для следующих типов с PHP 7.1.0:

  • iterable Параметр должен быть либо массивом, либо instanceof Traversable.

Итак, теперь другой ответ на этот вопрос на самом деле (вид):

Переключите PHP-версию на PHP7.x, и код будет работать так, как вы ожидаете.

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration