Пишем пространства с большой буквы в Yii 2.0

от автора

Не так давно вышла первая альфа Yii 2, уже можно знакомится подробнее с ним.

После многочисленных дебатов, авторы выбрали маленькие буквы для пространств. И их нельзя за это осуждать. Ведь все аргументы в пользу одного варианта или другого сводятся к личным предпочтениям.

Схожий случай с нескончаемой войной «пробелы vs. табуляция». Нам просто говорят: «Смиритесь с этим, не парьтесь».

ОК. Стараюсь смирится. Даже первое время получалось, кого интересует что там внутри фреймворка. Но ничего не получается.

namespace app\controllers;  use yii\web\Controller; use Zend\Barcode\Barcode;  class SiteController extends Controller { } 

Мне не комфортно когда в приложении вот такой вот бардак.

Пробелы и табуляцию можно взаимо заменить. Git hooks или IDE сделает это очень быстро. С пространствами сложнее, но нас же это не остановит 🙂

Помним что в PHP классы не чувствительны к регистру, остается лишь импортировать нужный файл.
Для этого добавим нужный автозагрузчик классов, сделать это надо после регистрации загрузчика Yii.

spl_autoload_register(function ($class) { 	if (0 === strpos($class, 'Yii\\')) { 		$pos = strrpos($class, '\\'); 		$parts = explode('\\', substr($class, 0, $pos)); 		array_walk( 			$parts, 			function (&$item) { 				$item = lcfirst($item); 			} 		); 		spl_autoload_call( 			implode('\\', $parts) . '\\' . substr($class, $pos + 1) 		);  		return true; 	}  	return false; }); 

Код лежит в репозитории, если вы используете Composer, можете добавить следующую зависимость

"repositories": [ 	{ 		"type": "package", 		"package": { 			"name": "slavcodev/ucfirst-namespace", 			"version": "dev-master", 			"source": { 				"type": "git", 				"url": "https://github.com/slavcodev/yii2-ucfirst-namespace.git", 				"reference": "master" 			}, 			"autoload": { 				"files": ["autoload.php"] 			} 		} 	} ], "require": { 	"php": ">=5.4.0", 	"ext-intl": "*", 	"yiisoft/yii2": "*", 	"slavcodev/ucfirst-namespace": "*" } 

Все теперь у нас порядок.

namespace App\Controllers;  use Yii\Web\Controller; use Zend\Barcode\Barcode;  class SiteController extends Controller { } 

P.S. Очень прошу не устраивать в комментариях холивар и не выражать свое негодование к решению разработчиков. Давайте сконцентрируемся на тексте поста, может у вас есть ко мне замечания или идеи как улучшить код. Спасибо.

ссылка на оригинал статьи http://habrahabr.ru/post/205734/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *