способ указать тип класса объекта в PHP

Существует ли способ указать тип атрибута объекта в PHP? например, у меня было бы что-то как:

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


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

В противном случае Вы знаете, будет ли это возможно в одной из будущей версии PHP однажды?

12
задан Cedric 2 July 2010 в 10:58
поделиться

4 ответа

В дополнение к уже упомянутому TypeHinting вы можете задокументировать свойство, например

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 может помочь некоторым IDE в предоставлении поддержки кода.

12
ответ дан 2 December 2019 в 18:18
поделиться

То, что вы ищете, называется подсказкой типа и частично доступно, начиная с PHP 5 / 5.1, в объявлениях функций, но не так, как вы хотите использовать его в определении класса.

Это работает:

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

но не работает:

class MyClass
  {
    public OtherClass $otherclass;

Я не думаю, что это планируется в будущем, по крайней мере, я не знаю, что это планируется для PHP 6.

вы могли бы тем не менее, обеспечьте соблюдение ваших собственных правил проверки типов, используя функции получения и установки в вашем объекте. Однако он не будет таким элегантным, как OtherClass $ otherclass .

Руководство PHP по подсказкам типов

6
ответ дан 2 December 2019 в 18:18
поделиться

Вы можете указать тип объекта, вставляя объект в переменную через type-hint в параметре метода-установщика. Примерно так:

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
ответ дан 2 December 2019 в 18:18
поделиться

Нет. Вы можете использовать подсказку типа для параметров функции, но вы не можете объявить тип переменной или атрибута класса.

2
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: