将字符串传递到具有类型提示的方法时出错

2022-08-30 19:49:00

在下面的代码中,我调用了一个函数(它恰好是一个构造函数),其中我有类型提示。当我运行代码时,我得到以下错误:

可捕获的致命错误:传递给 Question::__construct() 的参数 1 必须是字符串的实例,给定的字符串,在第 3 行调用.php并在有问题的行中定义.php在第 15

据我所知,错误告诉我该函数正在等待一个字符串,但传递了一个字符串。为什么它不接受传递的字符串?

运行.php

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

问题.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;
   }
}
?>

答案 1

PHP 不支持标量值的类型提示。目前,它仅适用于类,接口和数组。在你的例子中,它期望一个对象是“字符串”的实例。

目前在PHP的SVN主干版本中有一个支持此功能的实现,但是该实现是否是未来版本的PHP中发布的实现,或者它是否将受到支持尚未确定。


答案 2

只需从构造函数中删除(不支持),它应该可以正常工作,例如: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;

推荐