php - remove - Error al pasar la cadena al método con sugerencias de tipo
strip_tags() (5)
En el código a continuación, llamo a una función (resulta ser un constructor) en la que tengo sugerencias de tipo. Cuando ejecuto el código me sale el siguiente error:
Error fatal detectable : el argumento 1 pasado a Question :: __ construct () debe ser una instancia de string, string dada, llamada en run.php en la línea 3 y definida en question.php en la línea 15
Por lo que puedo decir, el error me dice que la función está esperando una cadena pero se pasó una cadena. ¿Por qué no está aceptando la cadena pasada?
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;
}
}
?>
De la documentación de PHP ( http://php.net/manual/en/language.oop5.typehinting.php )
Las sugerencias de tipo solo pueden ser del tipo de objeto y matriz (desde PHP 5.1). No se admiten las sugerencias de tipo tradicional con int y cadena.
No hay forma de sugerir la string
s, int
s o cualquier otro tipo primitivo
La sugerencia de tipo solo se puede utilizar para tipos de datos de objetos (o matrices desde 5.1), no para los tipos básicos como cadena, entero, flotante, booleano
PHP no admite el tipo de sugerencias para los valores escalares. Actualmente, solo es posible para clases, interfaces y arreglos. En su caso, está esperando un objeto que es una instancia de una clase de "cadena".
Actualmente hay una implementación que admite esto en la versión troncal de SVN de PHP, pero no está decidida si esa implementación será la que se lanzará en futuras versiones de PHP, o si será compatible en absoluto.
Simplemente quite la string
del constructor ( no es compatible ), debería funcionar bien, por ejemplo:
function __construct($anAnswer)
{
$this->theAnswer = $anAnswer;
}
Ejemplo de trabajo:
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;
NOTA
Las "declaraciones de tipo" (también conocidas como "sugerencias de tipo") están disponibles para los siguientes tipos desde PHP 7.0.0:
-
bool
El parámetro debe ser un valor booleano. -
float
El parámetro debe ser un número de punto flotante. -
int
El parámetro debe ser un entero. -
string
El parámetro debe ser una cadena. -
bool
El parámetro debe ser un valor booleano.
para los siguientes tipos desde PHP 7.1.0:
-
iterable
El parámetro debe ser una matriz o una instancia de Traversable.
Entonces, de ahora en adelante, otra respuesta a esta pregunta es (tipo de):
Cambie la versión de PHP a PHP7.x y el código funcionará como espera.
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration