Pull to refresh

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

Reading time 2 min
Views 14K
Не так давно вышла первая альфа 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 === strncmp($class, 'Yii\\', 4)) {
		$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. Очень прошу не устраивать в комментариях холивар и не выражать свое негодование к решению разработчиков. Давайте сконцентрируемся на тексте поста, может у вас есть ко мне замечания или идеи как улучшить код. Спасибо.
Tags:
Hubs:
+10
Comments 23
Comments Comments 23

Articles