Способ указать тип класса объекта в 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, в один прекрасный день?
Ответы
Ответ 1
В дополнение к уже указанному 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 annotation
поможет некоторым IDE в предоставлении Code Assistance.
Ответ 2
То, что вы ищете, называется Type Hinting и частично доступно с PHP 5/5.1 в объявлениях функций, но не так, как вы хотите использовать его в определении класса.
Это работает:
<?php
class MyClass
{
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}
но это не так:
class MyClass
{
public OtherClass $otherclass;
Я не думаю, что это запланировано на будущее, по крайней мере, я не знаю, как это планируется для PHP 6.
Тем не менее, вы могли бы использовать свои собственные правила проверки типов, используя функции getter и setter в вашем объекте. Однако он не будет таким же элегатором, как OtherClass $otherclass
.
Руководство PHP по подсказке типов
Ответ 3
Нет. Вы можете использовать тип hinting для параметров функции, но вы не можете объявить тип переменной или атрибута класса.
Ответ 4
Вы можете указать тип объекта, введя объект в переменную var с помощью типа-подсказки в параметре метода setter. Вот так:
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;
}
}