代码之家  ›  专栏  ›  技术社区  ›  brainimus user417509

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

  •  21
  • brainimus user417509  · 技术社区  · 14 年前

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

    可捕获的致命错误 :传递给问题的参数1::\uu construct()必须是字符串的实例,给定字符串,在第3行的run.php中调用并在中定义 PHP问题 在线 十五

    据我所知,错误是告诉我函数需要一个字符串,但传递了一个字符串。它为什么不接受传递的字符串?

    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;
       }
    }
    ?>
    
    5 回复  |  直到 7 年前
        1
  •  8
  •   Sarfraz    14 年前

    刚刚删除 string 来自构造函数( not supported )应该可以正常工作,例如:

    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;
    
        2
  •  28
  •   Daniel Egeberg    14 年前

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

    目前,在PHP的SVN主干版本中有一个实现支持这一点,但是还不确定该实现是否会在未来的PHP版本中发布,或者是否支持它。

        3
  •  4
  •   Mark Baker    14 年前

    类型提示只能用于对象数据类型(或5.1之后的数组),不能用于字符串、整数、浮点、布尔值等基本类型

        4
  •  2
  •   Iacopo    14 年前

    从PHP文档( http://php.net/manual/en/language.oop5.typehinting.php )

    类型提示只能是object和array类型(从php 5.1开始)。不支持用int和string表示的传统类型。

    无法暗示 string S int S或任何其他原始类型

        5
  •  0
  •   Axel    7 年前

    注释

    “类型声明”(又名“类型提示”)自php 7.0.0以来可用于以下类型:

    • bool 参数必须是布尔值。
    • float 参数必须是浮点数。
    • int 参数必须是整数。
    • string 参数必须是字符串。
    • 布尔 参数必须是布尔值。

    • iterable 参数必须是可遍历的数组或实例。

    从现在开始,这个问题的另一个答案实际上是:

    将PHP版本切换到php7.x,代码将按预期工作。

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