2017-08-17 1 views
1

Peut-être que je fais quelque chose d'horrible, mais je n'arrive toujours pas à trouver un moyen. Quelqu'un peut-il avoir une solution pour cela?Méthode de retour du type à l'intérieur de l'interface

J'ai une interface -

interface L_Item_Action{ 

    function get_title(); 

    function get_price(); 

    function valid($data); 

    function get_error_messages(); 
} 

Dans cette interface, je veux la fonction valid() pour retourner les valeurs booléennes seulement.

Ce n'est pas le doublon de celui-ci, car il ne s'agissait pas du tout d'interface. J'ai essayé boolean function valid($data); mais cela ne fonctionne pas. Y a-t-il un moyen?

Essayer d'effacer la confusion

Cette chose fonctionne -

function sum($a, $b): int { 
    return $a + $b; 
} 

bcoz ici, je suis en train de définir la fonction. Mais tout en le définissant comme une méthode abstraite ou une méthode d'interface, alors cela ne fonctionne pas.

function sum($a, $b): int; 
int function sum($a, $b); 

Ces deux opérations ne sont pas possibles.

+4

double possible de [Est-il possible d'écrire du code PHP strictement tapé?] (Https://stackoverflow.com/questions/1512293/is-it-possible- to-write-strict-typed-php-code) – Carcigenicate

+0

[Lire la suite] (http://php.net/manual/fr/functions.returning-values.php#functions.returning-values.type-declaration) Vous Il faudra probablement utiliser le mode strict pour que cela fonctionne comme vous le pensez avec les booléens. –

+0

Non ce n'est pas un doublon, Il n'était pas à l'intérieur d'une interface du tout – Alice

Répondre

1

Mise à jour, en raison de commentaires.

Si vous utilisez PHP 7 (que vous din't dites), vous devez l'utiliser stricte declare(strict_types=1); et utiliser function valid($data): bool{};

Mise à jour 2, en raison des commentaires

L'OP a affiché le code de sa question extacly like it is on the documentation for strict types, mais que la documentation a également dit qu'il est PHP 7 seulement, d'où la confusion

PHP7-strict-return-types

En PHP 5, vous devrez créer une sorte de cla observateurs ss qui vérifie vos types de retour par l'annotation et la réflexion. Mais cela pourrait peser très lourd sur le code/application. Une meilleure façon de PHP5 serait de faire des tests unitaires, pour s'assurer que le code est toujours utilisé correctement.

Si toutefois vous essayez de forcer les autres qui utilisent votre code, il suffit d'ajouter un avertissement;)

+0

Merci pour votre réponse, j'ai essayé avec Abstract Class aussi, mais le problème est - le type de retour ne fonctionne pas en écrivant la signature de la fonction comme 'boolean function valide ($ data); .... Où je définis les fonctions (à l'intérieur des classes) là, en forçant un type fonctionne – Alice

+0

Vous avez raison, cela ne fonctionne pas si vous ne prenez à bord que la moitié j'ai dit – DarkMukke

+0

Ohh, maintenant je lis à propos de declare (strict_types = 1); C'est cool info, je vais vous upvote pour cela J'ai eu l'idée exacte pourquoi il ne fonctionne pas .... Mais malheureusement, j'utilisais php 5 .... .Je vais mettre à jour mon serveur et essayer ..... Merci encore – Alice

0

Vous déclarez un type de retour dans une interface de la même façon que vous déclariez dans une classe.

boolean function valid($data); 

ne fonctionne pas car la déclaration du type de retour est au mauvais endroit. Ce code n'analysera même pas. La syntaxe correcte est:

function valid($data): boolean; 

See the PHP documentation for more information and examples.

+0

comme il se avère, OP utilise PHP 5 (voir commentaires), votre réponse repose sur PHP 7 – DarkMukke

+1

Toute réponse concernant les types de retour de méthode repose sur PHP 7. L'OP utilisait une syntaxe invalide pour déclarer le type de retour, donc cela n'aurait pas fonctionné même s'ils avaient la bonne version de PHP. –

+0

calme à droite vous êtes – DarkMukke