strip_tags remove ent_quotes ejemplo php type-hinting

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