façon de spécifier le type de classe D'un objet en PHP

y a-t-il un moyen de spécifier le type d'attribut D'un objet en PHP ? par exemple, j'aurais quelque chose comme :

class foo{
 public bar $megacool;//this is a 'bar' object
 public bar2 $megasupercool;//this is a 'bar2' object
}


class bar{...}
class bar2{...}

si ce n'est pas le cas, savez-vous si cela sera possible dans L'une des futures versions de PHP, un jour ?

10
demandé sur Cedric 2010-07-02 14:58:08

4 réponses

en plus de la saisie déjà mentionnée, vous pouvez documenter la propriété, par exemple

class FileFinder
{
    /**
     * The Query to run against the FileSystem
     * @var \FileFinder\FileQuery;
     */
    protected $_query;

    /**
     * Contains the result of the FileQuery
     * @var Array
     */
    protected $_result;

 // ... more code

@var annotation pourrait aider certaines Eid à fournir une Assistance de Code.

10
répondu Gordon 2010-07-02 11:10:03

ce que vous recherchez est appelé Type Hinting et est en partie Disponible depuis PHP 5 / 5.1 dans les déclarations de fonction, mais pas de la façon dont vous voulez l'utiliser dans une définition de classe.

Ceci fonctionne:

<?php
class MyClass
{
   public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }

mais cela ne fonctionne pas:

class MyClass
  {
    public OtherClass $otherclass;

Je ne pense pas que ce soit prévu pour le futur, du moins je ne suis pas au courant que ce soit prévu pour PHP 6.

vous pouvez cependant appliquer vos propres règles de vérification de type en utilisant getter et setter fonctions dans votre objet. Il ne va pas être comme elegeant OtherClass $otherclass.

Manuel PHP sur le Type Hinting

6
répondu Pekka 웃 2010-07-02 11:05:15

Non. Vous pouvez utiliser type hinting pour les paramètres de fonction, mais vous ne pouvez pas déclarer le type d'une variable ou d'un attribut de classe.

2
répondu Sjoerd 2010-07-02 11:04:49

Vous pouvez spécifier le type d'objet, tout en injectant l'objet dans le var via une indication de type dans le paramètre d'une méthode setter. Comme ceci:

class foo
{
    public bar $megacol;
    public bar2 $megasupercol;

    function setMegacol(bar $megacol) // Here you make sure, that this must be an object of type "bar"
    {
        $this->megacol = $megacol;
    }

    function setMegacol(bar2 $megasupercol) // Here you make sure, that this must be an object of type "bar2"
    {
        $this->megasupercol = $megasupercol;
    }
}
0
répondu Alex Sawallich 2010-07-02 11:08:00