Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error when passing string into method with type hinting

Tags:

In the code below I call a function (it happens to be a constructor) in which I have type hinting. When I run the code I get the following error:

Catchable fatal error: Argument 1 passed to Question::__construct() must be an instance of string, string given, called in run.php on line 3 and defined in question.php on line 15

From what I can tell the error is telling me that the function is expecting a string but a string was passed. Why isn't it accepting the passed string?

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;    } } ?> 
like image 518
brainimus Avatar asked Jun 24 '10 18:06

brainimus


2 Answers

PHP doesn't support type hinting for scalar values. Currently, it's only possible for classes, interfaces and arrays. In your case, it's expecting an object that is an instance of a "string" class.

There is currently an implementation supporting this in the SVN trunk version of PHP, but it's undecided if that implementation will be the one that gets released in future versions of PHP, or if it will be supported at all.

like image 105
Daniel Egeberg Avatar answered Sep 20 '22 16:09

Daniel Egeberg


Just remove string from constructor (not supported) , it should work fine eg:

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

Working Example:

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; 
like image 29
Sarfraz Avatar answered Sep 18 '22 16:09

Sarfraz