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

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

Фатальная ошибка Catchable: Аргумент 1 передал Вопросу:: __ конструкция () должна быть экземпляром строки, строки, данной, названной в 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;
   }
}
?>
21
задан brainimus 24 June 2010 в 18:20
поделиться

4 ответа

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

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;
8
ответ дан 29 November 2019 в 20:31
поделиться

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

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

28
ответ дан 29 November 2019 в 20:31
поделиться

Подсказка типа может использоваться только для типов данных объекта (или массивов, начиная с версии 5.1), но не для основных типов, таких как строка, целое число, с плавающей запятой, логическое значение

4
ответ дан 29 November 2019 в 20:31
поделиться

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

Подсказки типов могут быть только типа object и array (начиная с PHP 5.1). Традиционные подсказки типов int и string не поддерживаются.

Нет возможности подсказывать strings, ints или любой другой примитивный тип

2
ответ дан 29 November 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: