if || or === 12строк||2строки :что выбрать?

Статус
В этой теме нельзя размещать новые ответы.

JSergRu

..ιilliιlιiιliιllilιι..
PHP:
if (isset($_GET['module']))
{	
	$module=$_GET['module'];
	$file="modules/".$module.".php";
		if (file_exists($file))
		{
			include $file;
		}else{ //обработка ошибки
		}
}else{
include ("modules/Index.php");
}
Вышенаписанный код сократил до двух строк
PHP:
(@$module=$_GET['module']) or ($module="Index");
(@include "modules/".$module.".php") or die("Error???");
Вопрос: как это выглядит? Является ли это говнокодом? Что набрать в поисковике чтобы почитать о (/*выражение*/)or(/*выражение*/);? Есть ли другие комментарии и предложения?
 

Breeze

goshogun
Команда форума
Партнер клуба
ужасно выглядит
уж лучше как-то так
PHP:
$allowed_modules = Array(
	'index'=>1,
	'page1'=>1,
	'page2'=>1
);

$default_module = 'index';

$request_mod = isset($_GET['module']) ? $_GET['module'] : $default_module;

if ( !isset($allowed_modules[$request_mod]) || $allowed_modules[$request_mod]!=1 ) {
	$request_mod = $default_module;
}

include '/path/to/modules/'.$request_mod.'.php';
 

С.

Продвинутый новичок
Оператором "or" нет смысла злопотреблять. Например
PHP:
(@$module=$_GET['module']) or ($module="Index");
довольно коротко записывается и без @or'ных изысков
PHP:
$module= isset($_GET['module']) ? $_GET['module'] : 'Index';
Вторую строку не рассматриваю, поскольку она неравнозначна соответстбуюшему коду сверху. В ней нет обработки ошибки.
 

JSergRu

..ιilliιlιiιliιllilιι..
Спасибо всем, кто участвовал в теме, особая благодарность пользователям Breeze и С.! ))
 

Vin-Diesel

Новичок
PHP:
$module = isset($_GET['module']) ? $_GET['module'] : 'index';
if(file_exists($module))
 include "modules/".$module.".php";
else
 die('error');
?module=../mysql-config
?module=../../../etc/.htpasswd%00
и т.д.
:)

и вообще можно так:
PHP:
$module = isset($_GET['module']) ? $_GET['module'] : 'index';if(file_exists($module)) include "modules/".$module.".php";else die('error');
 

Vin-Diesel

Новичок
Можно, но не нужно. Ваш верхний(другой) вариант стиля самый оптимальный для читабельности из предложенных.
я так пошутил:)
Хотя для автора судя по названию темы критично количество строк.

Я первые два года когда занимался PHP тоже гнался "за количеством", зря...
 

JSergRu

..ιilliιlιiιliιllilιι..
?module=../mysql-config
?module=../../../etc/.htpasswd%00
и т.д.
такие запросы планирую исключить примерно так
PHP:
$allowed_modules = Array(
	'index'=>1,
	'page1'=>1,
	'page2'=>1
);

if ( !isset($allowed_modules[$request_mod]) || $allowed_modules[$request_mod]!=1 ) {
	$request_mod = $default_module;
}

include '/path/to/modules/'.$request_mod.'.php';
я так пошутил:)
Хотя для автора судя по названию темы критично количество строк.
отчасти правда, но поправлю чуть: количество +читабельность - в первом после код слишком раздутый, который грамотно сократили )
а ещё лучше
PHP:
$module = $request->get('module', 'index');
:D
это намек на создание универсального класса обработки входящих значений? )
 

Redjik

Джедай-мастер
Лучше свичем тогда, он по-моему красивее и понятнее
За такие советы надо расстреливать.

такие запросы планирую исключить примерно так...
Да хороший вариант, посмотри фреймы с MVC, там примерно такой же принцип в бутстрапе заложен.

UPD. а, так этот пример Breeze написал =))) смотрю как то вменяемо очень... =)
 

JSergRu

..ιilliιlιiιliιllilιι..
Лучше свичем тогда, он по-моему красивее и понятнее:
Спорить не буду, однако массив дает мне возможность закрывать доступ к страницам с помощью ключей массивов "на уровне пользователя" ... )
PHP:
{$allowed_UsersGroup = Array(
    'Гость'=>0,
    'Пользователь'=>1,
    'Местный'=>2,

    'Модератор'=>6,

    'Администратор'=>8,
    'Бог проекта'=>9
);
}
{$allowed_Modules = Array(
    'Index'=>0,
    'Join'=>0,
    'Admin'=>8,
    'page4users'=>1
);
}
 

Breeze

goshogun
Команда форума
Партнер клуба
Вы не правы. switch хорошо читабелен и во многих случаях лучше использовать его, чем использовать выкрутасы.
Выкрутасы надо использовать только там, где они дают явные плюсы относительно простых конструкций. Это одно из правил хорошего кода, вроде как...
в данном случае свич -- выкрутас. он неуниверсален, неуправляем и зело говнокодист в 90% случаев.
 

Breeze

goshogun
Команда форума
Партнер клуба
Спорить не буду, однако массив дает мне возможность закрывать доступ к страницам с помощью ключей массивов "на уровне пользователя" ... )
и дает "искаропки" возможность работы с хранилищами настроек
 

AmdY

Пью пиво
Команда форума
switch это признак пахнущего кода, любой switch можно заменить на фабричный метод или аналог.

в данном случае, каждый новый модуль потянет изменения в switch. Вопрос - Нафига?
 

Redjik

Джедай-мастер
Chushkin
мне один раз попался в руки код с подобной структурой - там было в районе 30 кейсов
 

AmdY

Пью пиво
Команда форума
Chushkin
в данном случае switch ничуть не читабельнее варианта с массивом, даже проигрывает. Не говоря уже о том, что массив как минимум лучше расширвается и может формироваться динамически под разные роли, а вариант с кейсом захардкожен и не расширяем. Не говоря уже

p.s. После всех понтов и подобных советов, больше не комментируй в разделе работа, буду сразу чистить посты.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху