Существует ли способ указать тип атрибута объекта в PHP? например, у меня было бы что-то как:
class foo{
public bar $megacool;//this is a 'bar' object
public bar2 $megasupercool;//this is a 'bar2' object
}
class bar{...}
class bar2{...}
В противном случае Вы знаете, будет ли это возможно в одной из будущей версии PHP однажды?
В дополнение к уже упомянутому 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 в предоставлении поддержки кода.
То, что вы ищете, называется подсказкой типа и частично доступно, начиная с PHP 5 / 5.1, в объявлениях функций, но не так, как вы хотите использовать его в определении класса.
Это работает:
<?php
class MyClass
{
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}
но не работает:
class MyClass
{
public OtherClass $otherclass;
Я не думаю, что это планируется в будущем, по крайней мере, я не знаю, что это планируется для PHP 6.
вы могли бы тем не менее, обеспечьте соблюдение ваших собственных правил проверки типов, используя функции получения и установки в вашем объекте. Однако он не будет таким элегантным, как OtherClass $ otherclass
.
Вы можете указать тип объекта, вставляя объект в переменную через 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;
}
}
Нет. Вы можете использовать подсказку типа для параметров функции, но вы не можете объявить тип переменной или атрибута класса.