Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Tools, Глупости которые иногда помогают.
SlavaFr  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1562
Пользователь №: 22453
На форуме: 7 лет, 1 месяц, 25 дней
Карма: 105




В ява имеется концерт Bean, то есть просто объект хранения который имеет сеттеры и гетеры методы, которыми садят или выдают переменные класса.
Хотя в ПХП имеются ассоциативные массивы, которые помогают при этой проблеме, но эдиторы из за отсутствия типизации не помогают ни чем, что бы заполнить названия ключей.
Я создал для линивых траит, который помогает создавать делать гетеры и сеттеры автоматически, а тах же генерировать Комментарий к классу, что бы помочь эдитору найти эти методы.

пример как пользоваться:

namespace Test {

use Bean\Bean; //этого достаточно для сеттеров и геттеров

/**
*
@method mixed getName()
*
@method $this setName(mixed $value)
*
@method mixed getFirstname()
*
@method $this setFirstname(mixed $value)
*/

class MyBean
{
use Bean;
private $name;
private $firstname;
}

//применение сеттеров и геттероф.
$a = new MyBean();
$a->setName('Testname')
->
setFirstname('TestFirstname');

echo $a->getName() . '-' .$a->getFirstname();
}
//выдаёт:
/**
*
@method mixed getName()
*
@method $this setName(mixed $value)
*
@method mixed getFirstname()
*
@method $this setFirstname(mixed $value)
*/




IDE конечно же не знает методов getFirstname и getName, но если вы добавите в начале класса комментарий который вы можете генерировать самим классом

echo->generateIDEComments();


то ваш эдитор будет подсказывать эти методы...



########
код самого траида таков:

namespace Bean
{
/**
* trait for generate setter and geter methods for
*
* Trait Bean
*
@package Bean
*/

trait Bean
{
public function __call($name, $arguments)
{
if (!preg_match('#^(get)|(set)[A-Z]+.*$#', $name)) {
throw new \LogicException('call is only from seter and getter methods');
}

$propertyStr = substr($name,3);
$propertyName = '';
if (property_exists(get_called_class(), $propertyStr)) {
$propertyName = $propertyStr;
} elseif (property_exists(get_called_class(), lcfirst($propertyStr))) {
$propertyName = lcfirst($propertyStr);
}

if (empty($propertyName)) {
throw new \LogicException('Property ' . $propertyStr. ' or ' . lcfirst($propertyStr). ' not exists');
}

//if get
if (strpos($name, 'get') ===0) {
return $this->$propertyName;
} else {
$this->$propertyName = isset($arguments[0]) ? $arguments[0] : null;
return $this;
}

}



/**
*
*/

public function generateIDEComments()
{
$comment = '/**'. PHP_EOL;
$properties = (new \ReflectionClass(get_called_class()))->getProperties();
foreach ($properties as $property) {
$name = ucfirst($property->getName());
$comment .= '* @method mixed get' .$name . '()' .
PHP_EOL. '* @method $this set' .$name . '(mixed $value)'.PHP_EOL;
}

return $comment . '*/';
}
}
}


Как и в любой другой библиотеке этот код не обязательно изучать... Достаточно только сделать инклуде на прямую или в аутолоаде и пользоваться в use внутри класса, как в примере .... При желание можно безусловно возиться, изменять, рассширять, критизировать или забыть о существование :)


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11966
Пользователь №: 23195
На форуме: 7 лет, 3 дня
Карма: 435

Трезвый :
7 лет, 11 месяцев, 2 дня


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


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1562
Пользователь №: 22453
На форуме: 7 лет, 1 месяц, 25 дней
Карма: 105




Да, в ИДЕ имеется генерация сеттеров и геттеров, но за счёт этого возрастает количество кода на 2 метода на переменную ((3 строки кода + 3 строки комментарий) *2 = 12 стркок... В моём случае только 2 строки .
При 10 переменых код для глупого been раздувается на 120 строк.
В принципе и 120 строк это не проблема, но компактный код с всего одним use Bean\Bean; и комментариями в классе мне лично нравятся больше.
В общем ты прав, что мир превосходно обойдётся и без моего изобретения smile.gif


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса