2010-06-24 14 views
21

Nel codice seguente chiamo una funzione (capita di essere un costruttore) in cui ho il suggerimento del tipo. Quando eseguo il codice ottengo il seguente errore:Errore durante il passaggio di una stringa nel metodo con tipo hinting

catturabile errore fatale: Argomento 1 passata alla domanda :: __ construct() deve essere un esempio di stringa, stringa data, chiamato in run.php sulla linea 3 e definito question.php on line

Da quello che posso dire l'errore mi sta dicendo che la funzione si aspetta una stringa, ma è stata passata una stringa. Perché non accetta la stringa passata?

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; 
    } 
} 
?> 

risposta

7

Basta togliere string dal costruttore (not supported), dovrebbe funzionare bene per esempio:

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

esempio pratico:

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; 
3

Tipo hinting può essere utilizzato solo per i tipi di dati oggetto (o matrici dal 5.1), non per i tipi di base come stringa, intero, galleggiante, booleani

1

Dal PHP documentazione (http://php.net/manual/en/language.oop5.typehinting.php)

Type Hints can only be of the object and array (since PHP 5.1) type. Traditional type hinting with int and string isn't supported.

Non c'è modo di accennare string s, int s o di qualsiasi altro tipo primitivo

27

PHP non supporta l'hint di tipo per i valori scalari. Attualmente, è possibile solo per classi, interfacce e matrici. Nel tuo caso, è in attesa di un oggetto che è un'istanza di una "stringa" classe.

Attualmente esiste un'implementazione che supporta questo nella versione di trunk SVN di PHP, ma è indeciso se tale implementazione sarà quella che verrà rilasciata nelle future versioni di PHP, o se sarà supportata a tutti.

+0

È perché scalari sono tutti massaggiati l'uno nell'altro a seconda delle necessità in PHP, in modo da 0 == false, ecc Come ad esempio, non è possibile digitare suggerimento uno scalare. È causa di molte discussioni sugli interni di PHP, di cui sono membro. – Fuser97381

0

NOTA

"dichiarazioni di tipo" (alias "tipo hinting") sono disponibili per i seguenti tipi dal PHP 7.0.0:

  • bool Il parametro deve essere un valore booleano.
  • float Il parametro deve essere un numero in virgola mobile.
  • int Il parametro deve essere un numero intero.
  • string Il parametro deve essere una stringa.
  • bool Il parametro deve essere un valore booleano.

per i seguenti tipi dal PHP 7.1.0:

  • iterable Il parametro deve essere o una matrice o un instanceof Traversable.

Quindi da ora in un'altra risposta a questa domanda in realtà è (tipo di):

Passare la versione di PHP per PHP7.x e il codice funzionerà come previsto.

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

Problemi correlati