Начиная с версии 5.4.0 в PHP есть возможность использования инструментария для повторного использования кода. Он называется — трейт.

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

Пример написания:

<?php
trait MyTrait {
	public function myFunc() {
		return 2 + 2;
	}
}
?>

Использование

Рассмотрим пример использования трейта на основе создания "Транслитератора" (суть: буквы кириллицы переводим в латиницу).

<?php
trait MyTransliterator {
	private $letters = array(
        'а' => 'a',   	'б' => 'b',     'в' => 'v',
        'г' => 'g',   	'д' => 'd',   	'е' => 'e',
        'ё' => 'e',   	'ж' => 'zh',  	'з' => 'z',
        'и' => 'i',   	'й' => 'y',   	'к' => 'k',
        'л' => 'l',   	'м' => 'm',   	'н' => 'n',
        'о' => 'o',   	'п' => 'p',   	'р' => 'r',
        'с' => 's',   	'т' => 't',   	'у' => 'u',
        'ф' => 'f',   	'х' => 'h',   	'ц' => 'c',
        'ч' => 'ch',  	'ш' => 'sh',  	'щ' => 'sch',
        'ь' => '',   	'ы' => 'y',   	'ъ' => '',
        'э' => 'e',   	'ю' => 'yu',  	'я' => 'ya',
        'А' => 'A',   	'Б' => 'B',   	'В' => 'V',
        'Г' => 'G',   	'Д' => 'D',   	'Е' => 'E',
        'Ё' => 'E',   	'Ж' => 'Zh',  	'З' => 'Z',
        'И' => 'I',   	'Й' => 'Y',   	'К' => 'K',
        'Л' => 'L',   	'М' => 'M',   	'Н' => 'N',
        'О' => 'O',   	'П' => 'P',   	'Р' => 'R',
        'С' => 'S',   	'Т' => 'T',   	'У' => 'U',
        'Ф' => 'F',   	'Х' => 'H',   	'Ц' => 'C',
        'Ч' => 'Ch',  	'Ш' => 'Sh',  	'Щ' => 'Sch',
        'Ь' => '',  	'Ы' => 'Y',   	'Ъ' => '_',
        'Э' => 'E',   	'Ю' => 'Yu',  	'Я' => 'Ya',
        'є' => 'ye', 	'ї' => 'yi', 	'і' => 'i',
        'Є' => 'YE', 	'Ї' => 'YI', 	'І' => 'I',
        ' ' => '_'
    );

	public function translate($str) {
		// заменяем символы кириллицы на символы латиницы
		return strtr(trim($str), $this->letters);
	}
}

class MyClass {
	use MyTransliterator;
	
	private $data;
	
	/**
	*	Некая функция для добавления данных в наш массив 
	*/
	public function setData(array $data) {
		$this->data = $data;
	}
	
	/**
	*	 Некая фукнция для подготовки данных
	*/
	public function getPreparedData() {
		// допустим, мы хотим сделать адрес страницы по названию
		// тогда, нам нужно перевести название с кириллическими символами на латиницу
		$this->data['url'] = strtolower($this->translate($this->data['title']));
		
		return $this->data;
	}
}

$obj = new MyClass;

$obj->setData([
	'title' => 'Не очень простое название для страницы',
	'content' => 'Текст страницы'
]);

$data = $obj->getPreparedData();

echo "<pre>";
print_r($data);
echo "</pre>";
?>

Результат:

Array
(
    [title] => Не очень простое название для страницы
    [content] => Текст страницы
    [url] => ne_ochen_prostoe_nazvanie_dlya_stranicy
)