В коде ниже я вызываю функцию (это, оказывается, конструктор), в котором у меня есть вывод подсказок типа. Когда я выполняю код, я получаю следующую ошибку:
Фатальная ошибка 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;
}
}
?>
Просто удалите строку
из конструктора ( не поддерживается ), все должно работать нормально, например:
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 не поддерживает подсказки типов для скалярных значений. В настоящее время это возможно только для классов, интерфейсов и массивов. В вашем случае ожидается объект, который является экземпляром класса "string" class.
В настоящее время существует реализация, поддерживающая это, в SVN-базовой версии PHP, но неизвестно, будет ли эта реализация выпущена в будущих версиях PHP, и будет ли она поддерживаться вообще.
Подсказка типа может использоваться только для типов данных объекта (или массивов, начиная с версии 5.1), но не для основных типов, таких как строка, целое число, с плавающей запятой, логическое значение
Из документации PHP (http://php.net/manual/en/language.oop5.typehinting.php)
Подсказки типов могут быть только типа object и array (начиная с PHP 5.1). Традиционные подсказки типов int и string не поддерживаются.
Нет возможности подсказывать string
s, int
s или любой другой примитивный тип