[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Tools
SlavaFr
В ява имеется концерт 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();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.