Как добится с хинтов в редакторе?

sverel

Новичок
Как добится с хинтов в редакторе?

В моём фреймворке модель для работы с БД построена только на статических методах и мне очень удобно когда я набираю "DB::" сразу увидеть список методов и не печатая выбрать один из них + сразу увидеть набор параметров для него. Но, статика накладывает некоторые ограничения, поэтому надо переходить на объекты и плодить их фабриками. Теперь когда я пишу

$dbModel = DB::factory('users'); // возвращает мне объект класса DB

Мой ZDE даже понятия не имеет какого типа переменная $dbModel и тем более, какого она класса. Соответственно, я лишился подсказок, постоянно леплю очепятки в длинных методах и путаю параметры местами, когда их много.

А работать с моделью приходится очень часто и я реально задыхаюсь без этих подсказок. А что же делать?
Сомневаюсь, что другие редакторы (Studo, NetBeans) смогут из фабрики понять что там вернулось, но может есть какой-нить трюк, например со спец комментами
PHP:
/**
 * @return object DB
 */
Или ещё какой хак?
 

Ragazzo

TDD interested
Использовать уже созданные велосипеды, поддержка которых есть в ide
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Сомневаюсь, что другие редакторы (Studo, NetBeans) смогут из фабрики понять что там вернулось, но может есть какой-нить трюк, например со спец комментами
да, нетбинс знает что такое пхпдок, и умеет по ним автодополнятся.
 

Вурдалак

Продвинутый новичок
Не, в данном случае из фабрики возвращается же объект неизвестного типа.

-~{}~ 13.08.10 22:26:

Это может быть Model_User, может ещё что-то — зависит от переданного параметра.
 

newARTix

Новичок
sverel
а разве когда ты начал печатать название метода тебе не выдаются подсказки? В том числе и по параметрам.

Я юзаю phpDesigner и подсказок вообще не замечаю, настолько быстро, четко и предсказуемо они там работают. Два месяца мучился на одной работе с Eclipse... это были кошмарные два месяца.
Хотя phpDesigner начал двигаться в сторону Эклипса, что огорчает... Ну и платный он...
 

sverel

Новичок
Вурдалак
Да. точно. забыл про это написать.
Хотя большинство моделей наследуются от абстрактной и не дополняют её. Поэтому сойдёт если редактор будет знать что $dbModel - это объект класса DB_Abstract - в нём 99% всех методов.

флоппик
Мой ZDE тоже знает про PHPDoc, но когда я тестил, то названия классов он не подцеплял.
PHP:
/**
 * Example
 * @return	object	FS
 */
function factory() {
	return new FS();
}
$obj = factory();
$obj-> // не вылетает подсказка
newARTix
Если я обращаюсь к статическому методу и пишу "DB::" - то мгновенно вылетают. Но когда я пишу "$obj->" - ничего не вылетает. А в phpDesigner вылетают?
Да, кстати, если явно определить класс
PHP:
$obj = new myClass();
$obj-> // то тут будут вылетать
Но если через фабрику....
 

newARTix

Новичок
sverel
нет, если просто напишешь -> то не вылетают конечно, слишком много вариантов, но если начнешь набирать название метода, то вылетают варианты с указанием возможного класса.
Это я к тому, что когда название метода набрал, то параметры то уже однозначно подсказываются.
 

sverel

Новичок
newARTix
Врят ли это зависит от кол-ва вариантов т.к. при написании "DB::" - вылетает хинт с большим кол-вом и скролл внутри хинта.
Щас скачаю phpDesigner, попробую...

-~{}~ 13.08.10 22:53:

Вурдалак
АЛИЛУЯ! Спасибо. Мой старенький ZDE ещё поживёт у меня :)
 

newARTix

Новичок
sverel
не, ну я упростил конечно, по сути подсказываются "возможные" варианты, а при написании просто $obj-> возможно все что угодно :)
Ну в общем глянешь-оценишь :) Хотя я не думаю, что ZDE настолько уж убог, чтобы так легко отпустить тебя на другой непривычный редактор :)

-~{}~ 13.08.10 22:59:

Ну вот :) ЧТД, "старый друг лучше новых двух" :)
 

sverel

Новичок
Составил инструкцию. Может кому-то пригодится:
PHP:
/**
 * @return    myClass  // именно так
 */
function factory() {
    return new myClass();
}
$obj = factory();
$obj-> // будет вылетать подсказка
Но для классов немного хитрее
PHP:
class myController {
	
	/**
	 * @var	myClass
	 */
	protected $dbModel = null;
	
	
	public function __construct()
	{
		$this->dbModel = factory();
		$this->dbModel-> // Здесь будет вылетать даже если не определить атрибут класса
	}
	
	public function test()
	{
		$this->dbModel-> // но что бы здесь вылетала подсказка, необходимо обязательно определить атрибут класса и написать ему @var myClass
	}
}
newARTix
У Вас наверное все методы со всех классов показывает... А в ZDE только методы нужного класса. Если в классе myClass всего 2 матода, значит при написании "$myObj->" будет показывать в хинте только 2 метода и никаких больше.
 

newARTix

Новичок
sverel
да, у phpDesigner хинты намного проще чем у "серьезных" IDE. Но мне хватает, никаких неудобств никогда не испытывал. (phpDoc пишу для документации, а не для редактора ;) Хотя он на 50% тоже автоматом пишется.) Просто удивился я, как так вы параметры местами путаете?
 

sverel

Новичок
ну когда у метода 6 параметров....
function getList($filter, $order, $group, $limit, $recursive, $showSql)
То начинаеш иногда путать group и limit местами.

А ведь есть же ещё похожие
function getOneItem($table, $filter, $order, $recursive=0, $showSQL); не хватает $group и limit.

А ещё точно такой же метод но на другом классе-наследнике
function getList($owner, $filter, $order, $group, $limit, $recursive, $showSql) // это модель для древовидной структуры, поэтому тут дополняется обязательный параметр $owner. В конец его добавить нельзя, потому что все остальные параметры не обязательные.
 

newARTix

Новичок
sverel
ну дык IDE ведь в итоге подсказывает вам какие параметры у этого метода? phpDesigner хоть и не определяет точно класс метода, выводит все классы в которых есть метод с таким названием, и выводит подсказки по параметрам всех этих возможных методов. В реальности этого вполне достаточно. Хотя, опять же, все это дело привычки в больше степени.
 

newARTix

Новичок
То есть, пока ZDE не определял точно класс метода, он и подсказку по "вероятным" классам не выводил? Ну тады понятно.
 

AmdY

Пью пиво
Команда форума
не читал всё, но
PHP:
/* @var $dbModel Model_User */
$dbModel = DB::factory('users')
 

tenshi

Новичок
> Мой ZDE даже понятия не имеет какого типа переменная $dbModel и тем более, какого она класса. Соответственно, я лишился подсказок, постоянно леплю очепятки в длинных методах и путаю параметры местами, когда их много.

1. не делать длинных методов
2. не делать много параметров


> А ещё точно такой же метод но на другом классе-наследнике
function getList($owner, $filter, $order, $group, $limit, $recursive, $showSql) // это модель для древовидной структуры, поэтому тут дополняется обязательный параметр $owner. В конец его добавить нельзя, потому что все остальные параметры не обязательные.

нарушается принцип подстановки лисков
 
Сверху