- 1
- 2
- 3
- 4
$uri = isset($endpoint['path']) ? $endpoint['path'] : null;
if (!isset ($uri)) {
$uri = "/";
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+6
$uri = isset($endpoint['path']) ? $endpoint['path'] : null;
if (!isset ($uri)) {
$uri = "/";
}
вместо $uri = isset($endpoint['path']) ? $endpoint['path'] : '/';
+4
private function urlEncoder($val)
{
return str_replace('%7E', '~', rawurlencode($val));
}
private function getParametersAsString(array $data)
{
$params = [];
foreach ($data as $key => $val)
$params[] = $key .'='. $this->urlEncoder($val);
return implode('&', $params);
}
методы urlEncoder и getParametersAsString кривая замена стандартным функциям urlencode и http_build_query
+4
foreach($this->styles as $media=>$style){
foreach($this->styles as $path){
$output .= '<link type="text/css" href="'.$path.'" rel="stylesheet" media="'.$media.'" />'."\n";
}
}
лолшто?
+2
class/View.php
<?php
class View {
...
public function compile() {
$view_src = file_get_contents(VIEW_SRC_PATH . $this->full_name . EXT);
// echo
$view_src = preg_replace("/\{\{(\w+)\}\}/", "<?php echo \$$1; ?>", $view_src);
$view_src = preg_replace("/\{\{(\w+)\|(\w+)\}\}/", "<?php echo \$$1['$2']; ?>", $view_src);
$view_src = preg_replace("/\{\{(\w+)\.(\w+)\}\}/", "<?php echo \$$1->$2; ?>", $view_src);
// foreach
$view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$2 as \$$1): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\|(\w+)-->/", "<?php foreach(\$$2['$3'] as \$$1): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$2->$3 as \$$1): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$3->$4 as \$$1 => \$$2): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$3 as \$$1 => \$$2): ?>", $view_src);
$view_src = preg_replace("/<!--each-->/", "<?php endforeach; ?>", $view_src);
// switch
$view_src = preg_replace("/<!--select\s+(\w+)\.(\w+)-->\s*<!--when\s+(.+)-->/", "<?php switch(\$$1->$2): case $3: ?>", $view_src);
$view_src = preg_replace("/<!--when\s+(.+)-->/", "<?php break; ?><?php case $1: ?>", $view_src);
$view_src = preg_replace("/<!--otherwise-->/", "<?php break; ?><?php default: ?>", $view_src);
$view_src = preg_replace("/<!--select-->/", "<?php endswitch; ?>", $view_src);
if (!file_exists(VIEW_PATH . $this->path)) mkdir(VIEW_PATH . $this->path, 0777, true);
$fp = fopen(VIEW_PATH . $this->full_name . EXT, 'w');
fwrite($fp, $view_src);
fclose($fp);
}
...
?>
view-src/ShadeType.php
{{type.name}}
<!--each k d in type.diameters-->
<h1>{{k}}</h1>
<!--each s in d-->
<div>
{{s.bottom}} × {{s.top}} × {{s.height}}
<div>
<!--select s.mode-->
<!--when 'u'-->(на ушках)
<!--when 'p'-->(только подвес)
<!--otherwise-->
<!--select-->
</div>
</div>
<!--each-->
<!--each-->
view/ShadeType.php
<?php echo $type->name; ?>
<?php foreach($type->diameters as $k => $d): ?>
<h1><?php echo $k; ?></h1>
<?php foreach($d as $s): ?>
<div>
<?php echo $s->bottom; ?> × <?php echo $s->top; ?> × <?php echo $s->height; ?>
<div>
<?php switch($s->mode): case 'u': ?>(на ушках)
<?php break; ?><?php case 'p': ?>(только подвес)
<?php break; ?><?php default: ?>
<?php endswitch; ?>
</div>
</div>
<?php endforeach; ?>
<?php endforeach; ?>
На хостинге PHP 5.2, а старые версии фреймворков не хочется. Решил запилить свой.
+13
<?php
$lines = file('quest.txt');
if($_POST['Quest'] == "") {
echo "<HTML>";
echo "<HEAD>";
echo "<TITLE>Тестер</TITLE>";
echo "<script language=JavaScript type=text/javascript>";
echo "<!-- " . "\n";
echo "var differ = 90*60;";
echo "function timer() {";
echo "var hours, minutes, seconds;";
echo "differ = differ - 1;";
echo "document.forms['vopros'].TimeLeft.value=differ;";
echo "hours = Math.floor(differ/(60*60));";
echo "hours = (hours >= 60) ? hours%60 : hours;";
echo "hours = (hours < 10) ? \"0\" + hours : hours;";
echo "minutes = Math.floor(differ/(60));";
echo "minutes = (minutes >= 60) ? minutes%60 : minutes;";
echo "minutes = (minutes < 10) ? \"0\" + minutes : minutes;";
echo "seconds = differ;";
echo "seconds = (seconds >= 60) ? seconds%60 : seconds;";
echo "seconds = (seconds < 10) ? \"0\" + seconds : seconds;";
echo "var strDate = hours + \":\" + minutes + \":\" + seconds;";
echo "document.forms['timerForm'].timerBox.value=strDate;";
echo "if (differ<=0) {";
echo " document.forms['vopros'].Quest.value=100;";
echo " vopros.submit();";
... (и так далее)
Отличный кодец из дипломной работы студента!
+6
#include "stdafx.h"
#include "hackery.h"
#include <cstdint>
#include <windows.h>
/*XXX*/
unsigned char udiv128Data[] =
{
0x48, 0x89, 0xD0, // mov rax,rdx
0x48, 0x89, 0xCA, // mov rdx,rcx
0x49, 0xF7, 0xF0, // div r8
0x49, 0x89, 0x11, // mov [r9],rdx
0xC3 // ret
};
/*XXX*/
unsigned char sdiv128Data[] =
{
0x48, 0x89, 0xD0, // mov rax,rdx
0x48, 0x89, 0xCA, // mov rdx,rcx
0x49, 0xF7, 0xF8, // idiv r8
0x49, 0x89, 0x11, // mov [r9],rdx
0xC3 // ret
};
unsigned __int64(__fastcall *udiv128)(unsigned __int64 numhi, unsigned __int64 numlo, unsigned __int64 den, unsigned __int64* rem);
__int64(__fastcall *sdiv128)(__int64 numhi, __int64 numlo, __int64 den, __int64* rem);
namespace {
struct Q {
Q() {
/*XXX*/
udiv128 = reinterpret_cast<unsigned __int64(__fastcall *)(unsigned __int64, unsigned __int64, unsigned __int64, unsigned __int64*)>(&udiv128Data[0]);
/*XXX*/
sdiv128 = reinterpret_cast<__int64(__fastcall *)(__int64, __int64, __int64, __int64*)>(&sdiv128Data[0]);
/*XXX*/
DWORD dummy;
/*XXX*/
VirtualProtect(udiv128Data, sizeof(udiv128Data), PAGE_EXECUTE_READWRITE, &dummy);
/*XXX*/
VirtualProtect(sdiv128Data, sizeof(sdiv128Data), PAGE_EXECUTE_READWRITE, &dummy);
}
} q;
}
Вот такая вот загогулина получилась по причине того что в 64-х битной Вижуал Студии нет встроенного асма, нет интринсика для простой асмовой команды, но мне вот надо именно полное деление 128-битного числа на 64-х битное именно с остатком и мне совершенно фиолетово на то что Майкрософт думает на тему вредности команды DIV и заменимости деления умножением на обратное. Да, и мне влом усложнять структуру проекта и линковать какие-то символы с внешнего асма.
+4
$(window).on('load', function () {
var date = new Date();
day = date.getDate();
day = (parseInt(day, 10) < 10) ? ('0' + day) : (day);
$('[name = "PROPERTY[15][0]"]').val(day + '.' + (date.getMonth() + 1) + '.' + date.getFullYear() + ' ' + date.getHours() + ':' + (date.getMinutes() + 10) + ':00');
});
15:69 замечательное время!
−92
Если НЕ(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента=""И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тКонтрагент="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="" И тСумма="" И тКоличествоДней="" И тСуммаЭтоПроцент="") Тогда Запрос.Текст=Запрос.Текст+"
|ГДЕ";
КонецЕсли;
Если НЕ тСостояниеЗаписи="" Тогда Запрос.Текст=Запрос.Текст+"
| опмИзмененияСтандартныхУсловийОплаты.СостояниеЗаписи "+тЗнакСостоянияЗаписи+?(тЗнакСостоянияЗаписи="В"," (","")+"&СостояниеЗаписи"+?(тЗнакСостоянияЗаписи="В",")","");КонецЕсли; // опм 04.05.2015 доб. ?(тЗнакСостоянияЗаписи="В"," (","") +?(тЗнакСостоянияЗаписи="В",")","")
Если НЕ тРегистратор="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.теРегистратор "+тЗнакРегистратора+" &Регистратор";
КонецЕсли;
Если НЕ тДоговорКонтрагента="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДоговорКонтрагента "+тЗнакДоговораКонтрагента+" &ДоговорКонтрагента";
КонецЕсли;
Если НЕ тКонтрагент="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДоговорКонтрагента.Владелец "+тЗнакКонтрагента+?(тЗнакКонтрагента="В"," (","")+"&Контрагент"+?(тЗнакКонтрагента="В",")",""); // опм 04.05.2015 доб. ?(тЗнакКонтрагента="В"," (","") +?(тЗнакКонтрагента="В",")","")
КонецЕсли;
Если НЕ тДокументОткрытияКредитнойЛинии="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДокументОткрытияКредитнойЛинии "+тЗнакДокументаОткрытияКредитнойЛинии+" &ДокументОткрытияКредитнойЛинии";
КонецЕсли;
Если НЕ тВидЗаписи="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ВидЗаписи "+тЗнакВидаЗаписи+" &ВидЗаписи";
КонецЕсли;
Если НЕ тВидНачала="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ВидНачала "+тЗнакВидаНачала+" &ВидНачала";
КонецЕсли;
Если НЕ тПериод="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.Период "+тЗнакПериода+" &тПериод";
КонецЕсли;
Если НЕ тРазРегистратор="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.РазРегистратор "+тЗнакРазРегистратора+" &РазРегистратор";
КонецЕсли;
Если НЕ тДатаНачала="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДатаНачала "+тЗнакДатыНачала+" &ДатаНачала";
КонецЕсли;
Если НЕ тДатаОкончания="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДатаОкончания "+тЗнакДатыОкончания+" &ДатаОкончания";
КонецЕсли;
Если НЕ тСумма="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.Сумма "+тЗнакСуммы+" &Сумма";
КонецЕсли;
Если НЕ тКоличествоДней="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="" И тСумма="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.КоличествоДней "+тЗнакКоличестваДней+" &КоличествоДней";
КонецЕсли;
Если НЕ тСуммаЭтоПроцент="" Тогда Запрос.Текст=Запрос.Текст+"
| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="" И тСумма="" И тКоличествоДней="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.СуммаЭтоПроцент "+тЗнакСуммыЭтоПроцент+" &СуммаЭтоПроцент";
КонецЕсли;
И так далее на 122 строки.
+8
if(copytype==WHOLE_FILE) //whole file
О пользе комментариев
+2
Как избавиться от говнокода?
Вот есть большой проект в большой корпорации. Ты приходишь и видишь, что архитектура говно, комментариев нет, стиль кода различается в разных частях одного файла, да и в остальных мелочах полный говнокод.
С другой стороны, нужно добавить много разных фич и пофиксить баги, все программисты и ты тоже активно заняты этим, вы приделываете новые костыли и заплатки.
Как с этим бороться? Убеждать менеджера, что вам нужно несколько недель, а то и месяцев на полный рефакторинг всего? Заниматься этим в свободное время? Забить и говнокодить дальше? Уйти в другое место (не факт ведь, что там будет лучше)?