Как установить значение @return динамической функции? - PullRequest
1 голос
/ 24 апреля 2011

Скажите, у меня есть эта функция:

function load_model($modelName)
{
   $model = new $modelName;
   return $model;
}

Используя ее, я могу сделать:

$userModel = load_model('user');
$forumModel = load_model('forum');

и т. Д.Обе будут разными моделями с разными классами, разными функциями и т. Д.

Однако мое автозаполнение не работает, потому что оно не знает, каким будет возвращаемое значение функции load_model().

Есть ли способ сделать что-то подобное?

/**
* @return $modelName
*/

Это сообщит IDE, что возвращаемое значение является классом модели пользователя или классом модели форума?

1 Ответ

1 голос
/ 25 апреля 2011

Нет ... лучшее, на что вы можете надеяться, это то, что если все ваши различные классы моделей реализуют один и тот же интерфейс или, возможно, все выходят из одного и того же абстрактного родительского класса, вы можете поместить интерфейс или имя абстрактного класса как тип возврата.

Примеры:

Если

class UserModel implements ModelInterface {}

Тогда ваша функция load_model () может

@return ModelInterface an object that implements a Model

...

Или, если

class UserModel extends ModelAbstractParent {}

Тогда ваша функция load_model () может

@return ModelAbstractParent a concrete Model object

...

У phpDocumentor просто нет другого способа расшифровать тип возвращаемого значения, который является динамическим во время выполнения, и, следовательно, у автозаполнения IDE также нет способа выяснить это.

Однако, если ваши различные классы конкретной модели правильно реализуют интерфейс верхнего уровня или расширяются от общего абстрактного родительского класса, то использование интерфейса / абстрактного типа в качестве возвращаемого типа позволит для некоторого уровня автозаполнение для работы в IDE.

РЕДАКТИРОВАТЬ: есть еще один способ документировать тип возвращаемого значения, но я все еще не думаю, что автозаполнение будет работать с его использованием - перечисление нескольких типов возврата:

@return UserModel|LoadModel|PlaneModel|TrainModel|AutomobileModel an object of one of the various model classes

...