LINUX.ORG.RU

symfony, в принципе, выжимка из лучших практик.
Еще код, который я пишу, весьма красив и работает.

shimon ★★★★★
()

>расскажи про красивый код на PHP который ты видел.

Мой код в последние лет 5 красивый. Отвечаю :D

KRoN73 ★★★★★
()
<?php
if (true) {
    throw new Exception('Noooooooooooo!');
}
?>

по моему офигенско :3

dismal_faun ★★
()

Мой код на php очень красивый, пусть быдлокодерский, но красивый.

Pidgin ★★
()

>ЛОР, расскажи про красивый код на PHP который ты видел.
[tolsto]Это сказка[/tolsto]

ymuv ★★★★
()

я его даже пишу.

такие дела.

drBatty ★★
()

> Существует ли красивый код на PHP?
Нет.
</thread>

CYB3R ★★★★★
()
function sSort(&$Array)
{
    $i = 0;
    $n = count($Array);
    while ($i < $n)
    {
        if ($Array[$i+1] < $Array[$i])
        {
            list($Array[$i], $Array[$i+1]) = array($Array[$i+1], $Array[$i]);
            $i = 0;
        }
        else $i++;
    }
}

splinter ★★★★★
()

Я такой пишу. Пруф:

<?php try { $errors = array(); $section = $this->env->section; $category = (integer)$this->env->category; if ($section=='pump') { $pumpmode = true; $value = $this->env->value; if ((strlen($value) > 1) && ($value[0] == '?')) { list( $expertID, $worksID ) = explode( '|', substr( $value, 1 ) ); $worksID = explode( ',', $worksID ); } switch ($this->env->action) { case 'change_project': $this->out = 'xml'; echo «<experts>\n»; $activityID = (integer)$value; $experts = $this->dnto->activities->expert_list( $activityID ); foreach ($experts as $i) echo xmlitem( $i, false ); echo «</experts>\n<groups>\n»; foreach ($this->dnto->activities->query_activity_groups( $activityID ) as $i) echo xmlitem( $i, false ); echo «</groups>\n»; $struct = $this->dnto->activities->query_activity_list( $activityID ); echo fast2xml( «<?xml version=\„1.0\“ encoding=\„windows-1251\“?>\n» . make_dual_list( 'structure', $struct, 2 ), «{$module_path}activity-structure.xsl» ); break; case 'link': $this->out = 'text/plain'; $this->dnto->activities->link_st( 'persons', $expertID, 'materials', $worksID, 23 ); break; case 'unlink': $this->out = 'text/plain'; $this->dnto->activities->unlink_st( 'persons', $expertID, 'materials', $worksID ); break; case 'unchecked': $this->out = 'text/plain'; $this->dnto->activities->set_materials_state( $worksID, 0 ); break; case 'checking': $this->out = 'text/plain'; $this->dnto->activities->set_materials_state( $worksID, 1 ); break; case 'checked': $this->out = 'text/plain'; $this->dnto->activities->set_materials_state( $worksID, 2 ); break; case 'csv': list( $activityID, $expertID ) = explode( ',', $this->env->report ); $additional = $this->env->additional; $nominations = $additional['nominations']; $oldstates = $additional['oldstates']; $newstate = $additional['newstate']; $minmark = $additional['min']; $maxmart = $additional['max']; $labels_count = $additional['count']; $labels_text = $additional['labels']; $labels = preg_split( '/\\s+/m', $labels_text ); $_size = 0; foreach (array( 'cproject', 'ctitle', 'cexpert', 'corganisation' ) as $flag) { $test = array_key_exists( $flag, $additional ) && ($additional[$flag]=='on'); ${'_'.$flag} = $test; if ($test) $_size ++; } $_size += 5 + count( $labels ); $_gap = str_repeat( ';', $_size ); $_head = implode( ';', $labels ); $info = $this->dnto->persons->query_person_info( $expertID ); if ($info===false) throw new Exception( 'íåò òàêîãî ýêñïåðòà', -1 ); $filename = $info['surname'] . date( ' Y-m-d (H i s)' ) . '.csv'; $materials = $this->dnto->activities->query_expert_materials( $activityID, $expertID, $nominations, $oldstates ); $csv = array( '¹:;' . ($_cproject?'Íîìèíàöèÿ:;':") . ($_cexpert?'Ýêñïåðò:;':") . 'Ðàáîòà:;Àâòîð:;Ãîðîä:;Êëàññ:;' . ($_ctitle?'Íàçâàíèå ðàáîòû:;':") . ($_corganisation?'Îðãàíèçàöèÿ:;':") . $_head ); $ids = array(); $_prev = false; $index = 0; foreach ($materials as $i) { $_name = array_shift( $i ); if ( !$_cproject && ($_name != $_prev) ) { $_prev = $_name; $csv[] = $_name . $_gap; $index = 1; } $line = (string)($index++); $_c = 1; if ($_cproject) { $line .= ';' . $_name; $_c ++; } if ($_cexpert) { $line .= ";$info[surname] $info[firname] $info[vatname]"; $_c ++; } if (!$_ctitle) unset( $i['title'] ); if (!$_corganisation) unset( $i['organisation'] ); foreach ($i as $f) { $line .= ';' . normcsv( $f ); $_c++; } while ($_c < $_size) { $line .= ';'; $_c++; } $csv[] = $line; $ids[] = $i['id']; } if (count( $ids ) && ((integer)$newstate >= 0)) $this->dnto->activities->set_materials_state( $ids, $newstate ); $this->out = false; $contents = implode( «\r\n», $csv ); header( 'Expires: Mon, 1 Jan, 1996 00:00:00 GMT' ); header( «Content-Type: file/binary; charset=\„windows-1251\“» ); header( «Content-Disposition: attachment; filename=\»$filename\«» ); header( «Content-Length: » . strlen( $contents ) ); echo $contents; if (1 || $this->getb( 'save_report' )) try { $userinfo = $this->dcore->access->userinfo( $this->env->userID, $locale ); $this->dcore->vfs->select_user( $userinfo['username'], $userinfo['profileID'], $this->env->client_ip->encode(), $this->env->userID==1 ); $this->dcore->vfs->transaction_begin(); $path = $this->config->reportsdir; if ($path) { $replaces = array( '%user%' => $userinfo['username'], '%profile%' => $userinfo['profileID'] ); $path = str_replace( array_keys( $replaces ), array_values( $replaces ), $path ); } else $this->error( 'unspecified reports directory' ); if (!$this->dcore->vfs->create_path( $path ) || !$this->dcore->vfs->change_directory( $path )) { $this->error( «can`t access reports directory '$path'» ); } $this->dcore->vfs->create_file( $filename ); $this->dcore->vfs->write_file( $filename, $contents ); $this->dcore->vfs->transaction_commit(); } catch (Exception $exc) { $this->dcore->vfs->transaction_rollback(); } break; } } else $pumpmode = false; } catch (Exception $exc) { $message = $exc->getMessage(); if ($message) $errors[] = $message; if ($exc->getCode() != -1) throw $exc; } if (!$pumpmode) { if (count( $errors )) { echo «<errors>\n»; foreach ($errors as $error) echo «<item>$error</item>\n»; echo «</errors>\n»; } switch ($section) { case ": echo make_dual_list( 'open-activities', $this->dnto->activities->open_activities_list( true ), 1 ); break; case 'worklist': switch ($category) { case 1: $actions = array( array( 'name' => 'íåïðîâåðåííûå', 'action' => 'unchecked' ), array( 'name' => 'íà ïðîâåðêå', 'action' => 'checking' ), array( 'name' => 'ïðîâåðåííûå', 'action' => 'checked' ), array( 'action' => " ), array( 'name' => 'îòâÿçàòü îò ýêñïåðòà', 'action' => 'unlink' ), ); break; case 0: $actions = array( array( 'name' => 'ñâÿçàòü ñ ýêñïåðòîì', 'action' => 'link' ), ); break; } if (isset( $actions )) { echo «<actions>\n»; foreach ($actions as $i) echo xmlitem( $i, false ); echo «</actions>\n»; } break; case 'report': list( $activityID, $expertID ) = explode( ',', $report = $this->env->report ); $info = $this->dnto->persons->query_person_info( $expertID ); $this->qi( 'system/@title' )->nodeValue = TXMLLib::enc( «Ýêñïåðòíûé ëèñò» ); echo «<expert report=\»$report\«>$info[surname] $info[firname] $info[vatname]</expert>\n»; echo make_dual_list( 'nominations', $this->dnto->activities->query_expert_activities( $activityID, $expertID ), 1 ); echo «<info min=\„0\“ max=\„10\“ count=\„11\“ labels=\„1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Äîï.\“/>\n»; break; } echo «<body section=\»$section\" category=\«$category\»/>"; } ?>

Lynyrd
()
Ответ на: комментарий от shimon

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

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

> хаскелисты (у каждого строгий костюм, бокал дорогого вина и сигара, домашние тапочки)

бугага, откуда у них деньги хотя бы на тапочки?

Rastafarra ★★★★
()
Ответ на: комментарий от Lynyrd

Lynyrd

Я такой пишу. Пруф:

<?php try { $errors = array(); $section = $this->env->section; $category = (integer)$this->env->category; if ($section=='pump') { $pumpmode = true; $value = $this->env->value; if ((strlen($value) > 1) && ($value[0] == '?')) { list( $expertID, $worksID ) = explode( '|', substr( $value, 1 ) ); $worksID = explode( ',', $worksID ); } switch ($this->env->action) { case 'change_project': $this->out = 'xml'; echo «<experts>\n»; $activityID = (integer)$value; $experts = $this->dnto->activities->expert_list( $activityID ); foreach ($experts as $i) echo xmlitem( $i, false ); echo «</experts>\n<groups>\n»; foreach ($this->dnto->activities->query_activity_groups( $activityID ) as $i) echo xmlitem( $i, false ); echo «</groups>\n»; $struct = $this->dnto->activities->query_activity_list( $activityID ); echo fast2xml( «<?xml version=\„1.0\“ encoding=\„windows-1251\“?>\n» . make_dual_list( 'structure', $struct, 2 ), «{$module_path}activity-structure.xsl» ); break; case 'link': $this->out = 'text/plain'; $this->dnto->activities->link_st( 'persons', $expertID, 'materials', $worksID, 23 ); break; case 'unlink': $this->out = 'text/plain'; $this->dnto->activities->unlink_st( 'persons', $expertID, 'materials', $worksID ); break; case 'unchecked': $this->out = 'text/plain'; $this->dnto->activities->set_materials_state( $worksID, 0 ); break; case 'checking': $this->out = 'text/plain'; $this->dnto->activities->set_materials_state( $worksID, 1 ); break; case 'checked': $this->out = 'text/plain'; $this->dnto->activities->set_materials_state( $worksID, 2 ); break; case 'csv': list( $activityID, $expertID ) = explode( ',', $this->env->report ); $additional = $this->env->additional; $nominations = $additional['nominations']; $oldstates = $additional['oldstates']; $newstate = $additional['newstate']; $minmark = $additional['min']; $maxmart = $additional['max']; $labels_count = $additional['count']; $labels_text = $additional['labels']; $labels = preg_split( '/\\s+/m', $labels_text ); $_size = 0; foreach (array( 'cproject', 'ctitle', 'cexpert', 'corganisation' ) as $flag) { $test = array_key_exists( $flag, $additional ) && ($additional[$flag]=='on'); ${'_'.$flag} = $test; if ($test) $_size ++; } $_size += 5 + count( $labels ); $_gap = str_repeat( ';', $_size ); $_head = implode( ';', $labels ); $info = $this->dnto->persons->query_person_info( $expertID ); if ($info===false) throw new Exception( 'íåò òàêîãî ýêñïåðòà', -1 ); $filename = $info['surname'] . date( ' Y-m-d (H i s)' ) . '.csv'; $materials = $this->dnto->activities->query_expert_materials( $activityID, $expertID, $nominations, $oldstates ); $csv = array( '¹:;' . ($_cproject?'Íîìèíàöèÿ:;':") . ($_cexpert?'Ýêñïåðò:;':") . 'Ðàáîòà:;Àâòîð:;Ãîðîä:;Êëàññ:;' . ($_ctitle?'Íàçâàíèå ðàáîòû:;':") . ($_corganisation?'Îðãàíèçàöèÿ:;':") . $_head ); $ids = array(); $_prev = false; $index = 0; foreach ($materials as $i) { $_name = array_shift( $i ); if ( !$_cproject && ($_name != $_prev) ) { $_prev = $_name; $csv[] = $_name . $_gap; $index = 1; } $line = (string)($index++); $_c = 1; if ($_cproject) { $line .= ';' . $_name; $_c ++; } if ($_cexpert) { $line .= ";$info[surname] $info[firname] $info[vatname]"; $_c ++; } if (!$_ctitle) unset( $i['title'] ); if (!$_corganisation) unset( $i['organisation'] ); foreach ($i as $f) { $line .= ';' . normcsv( $f ); $_c++; } while ($_c < $_size) { $line .= ';'; $_c++; } $csv[] = $line; $ids[] = $i['id']; } if (count( $ids ) && ((integer)$newstate >= 0)) $this->dnto->activities->set_materials_state( $ids, $newstate ); $this->out = false; $contents = implode( «\r\n», $csv ); header( 'Expires: Mon, 1 Jan, 1996 00:00:00 GMT' ); header( «Content-Type: file/binary; charset=\„windows-1251\“» ); header( «Content-Disposition: attachment; filename=\»$filename\«» ); header( «Content-Length: » . strlen( $contents ) ); echo $contents; if (1 || $this->getb( 'save_report' )) try { $userinfo = $this->dcore->access->userinfo( $this->env->userID, $locale ); $this->dcore->vfs->select_user( $userinfo['username'], $userinfo['profileID'], $this->env->client_ip->encode(), $this->env->userID==1 ); $this->dcore->vfs->transaction_begin(); $path = $this->config->reportsdir; if ($path) { $replaces = array( '%user%' => $userinfo['username'], '%profile%' => $userinfo['profileID'] ); $path = str_replace( array_keys( $replaces ), array_values( $replaces ), $path ); } else $this->error( 'unspecified reports directory' ); if (!$this->dcore->vfs->create_path( $path ) || !$this->dcore->vfs->change_directory( $path )) { $this->error( «can`t access reports directory '$path'» ); } $this->dcore->vfs->create_file( $filename ); $this->dcore->vfs->write_file( $filename, $contents ); $this->dcore->vfs->transaction_commit(); } catch (Exception $exc) { $this->dcore->vfs->transaction_rollback(); } break; } } else $pumpmode = false; } catch (Exception $exc) { $message = $exc->getMessage(); if ($message) $errors[] = $message; if ($exc->getCode() != -1) throw $exc; } if (!$pumpmode) { if (count( $errors )) { echo «<errors>\n»; foreach ($errors as $error) echo «<item>$error</item>\n»; echo «</errors>\n»; } switch ($section) { case ": echo make_dual_list( 'open-activities', $this->dnto->activities->open_activities_list( true ), 1 ); break; case 'worklist': switch ($category) { case 1: $actions = array( array( 'name' => 'íåïðîâåðåííûå', 'action' => 'unchecked' ), array( 'name' => 'íà ïðîâåðêå', 'action' => 'checking' ), array( 'name' => 'ïðîâåðåííûå', 'action' => 'checked' ), array( 'action' => " ), array( 'name' => 'îòâÿçàòü îò ýêñïåðòà', 'action' => 'unlink' ), ); break; case 0: $actions = array( array( 'name' => 'ñâÿçàòü ñ ýêñïåðòîì', 'action' => 'link' ), ); break; } if (isset( $actions )) { echo «<actions>\n»; foreach ($actions as $i) echo xmlitem( $i, false ); echo «</actions>\n»; } break; case 'report': list( $activityID, $expertID ) = explode( ',', $report = $this->env->report ); $info = $this->dnto->persons->query_person_info( $expertID ); $this->qi( 'system/@title' )->nodeValue = TXMLLib::enc( «Ýêñïåðòíûé ëèñò» ); echo «<expert report=\»$report\«>$info[surname] $info[firname] $info[vatname]</expert>\n»; echo make_dual_list( 'nominations', $this->dnto->activities->query_expert_activities( $activityID, $expertID ), 1 ); echo «<info min=\„0\“ max=\„10\“ count=\„11\“ labels=\„1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Äîï.\“/>\n»; break; } echo «<body section=\»$section\" category=\«$category\»/>"; } ?>


А что будет, если запустить?

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

> А что будет, если запустить?

Социалистическая революция в США.

Lynyrd
()
Ответ на: комментарий от Rastafarra

>да как грязи, в чем проблема?
не знаю, возможно у меня какая-то пираццкая 1с, но там (почти) везде паттерн - «копипаст», и работа с данными в формах по Button1Click в худших делфи-традициях.
единственное, партионный учет недавно в бухгалтерии 2.0 смотрел, там да - красиво

anon1984
()
Ответ на: комментарий от CYB3R

> (у каждого строгий костюм, бокал дорогого вина и сигара, домашние тапочки)

А на туфли бабла не хватило.

shimon ★★★★★
()
Ответ на: комментарий от Lynyrd

> $this->dcore->vfs->transaction_rollback

I smell trouble
And where there's smoke
There must be fire

Tears of rage, tears of pain,
Burning my eyes,
I realize, I'm crying
Crying, I'm crying
Bitter tears falling like rain

queen3 ★★★★★
()
Ответ на: комментарий от Lynyrd

Забыл, как правило ООП называется на этот случай. Что-то насчёт точек, если больше одного уровня индирекции.

queen3 ★★★★★
()
Ответ на: комментарий от queen3

> Забыл, как правило ООП называется на этот случай.

Я правил не знаю, даже языки не учил, просто моя кормилица писала на PL/1, вот я и впитал кой чего.

Lynyrd
()
Ответ на: комментарий от splinter
<?php

class SortableException extends Exception
{
}

class Sortable
{
    const CMP_LESS = -1;
    const CMP_EQUAL = 0;
    const CMP_GREATER = 1;
    const CMP_NOTCOMPARABLE = "not comparable";

    private $length = 0;
    private $items = array();

    function __construct(array $aSmth)
    {
        if (!is_array($aSmth)) {
            throw new SortableException("Can not construct Sortable object, not an array given (" . gettype($aSmth) . ")");
        }
        try {
            $this->length = count($aSmth);
            for ($i = 0; $i < $this->length; $i++) {
                $this->items[] = $aSmth[$i];
            }
            return $this;
        }
        catch (Exception $ex) {
            throw new SortableException("Can not construct Sortable object");
        }
    }

    public function Compare($i, $j)
    {
        try {
            if ($this->items[$i] == $this->items[$j]) {
                return self::CMP_EQUAL;
            } elseif($this->items[$i] < $this->items[$j]) {
                return self::CMP_LESS;
            } elseif($this->items[$i] > $this->items[$j]) {
                return self::CMP_GREATER;
            } else {
                throw new SortableException("Can not compare ".$this->items[$i]." and ".$this->items[$j]);
            }
        }
        catch (Exception $ex) {
            throw new SortableException("Can not compare ".$this->items[$i]." and ".$this->items[$j]);
        }
    }

    public function SwitchElements($i, $j)
    {
        try {
            $tmp = $this->items[$i];
            $this->items[$i] = $this->items[$j];
            $this->items[$j] = $tmp;
        }
        catch (Exception $ex) {
            throw new SortableException("Can not switch ".$this->items[$i]." and ".$this->items[$j]);
        }
    }

    public function isSorted($bDirection = true)
    {
        for ($i = 0; $i < $this->length - 1; $i++) {
            if ($this->Compare($this->items[$i], $this->items[$i + 1]) == self::CMP_GREATER && $bDirection ||
                $this->Compare($this->items[$i], $this->items[$i + 1]) == self::CMP_LESS    && !$bDirection) {
                return false;
            }
        }
        return true;
    }

    function MegaSort($bDirection = true)
    {
        while (!$this->isSorted()) {
            $i = rand(0, $this->length - 1);
            $j = rand(0, $this->length - 1);
            if ($this->Compare($this->items[$i], $this->items[$j]) == self::CMP_GREATER && $bDirection ||
                $this->Compare($this->items[$i], $this->items[$j]) == self::CMP_LESS    && !$bDirection) {
                $this->SwitchElements($i, $j);
            }
        }
    }
}

$arr = array();
for ($i = 0; $i < 5; $i++) {
    $arr[] = rand(1, 5);
}
$shit = new Sortable($arr);
var_dump($shit);
var_dump($shit->isSorted());
$shit->MegaSort();
var_dump($shit);

?>

лол, я тут наговнокодил, что интересно оно не работает правильно и мне вломы разбираться где баг :3

dismal_faun ★★
()
Ответ на: комментарий от shimon

Еще код, который я пишу, весьма красив и работает.

27-летние девственники ЛОРа пишут красивый код на похапэ.

Скандалы, интриги, расследования...

NightmareZz
()
Ответ на: комментарий от sphericalhorse

угу, только вот ++$i все равно остается моветоном.

splinter ★★★★★
()
Ответ на: комментарий от sphericalhorse

продебы оно везде быстрей, если i неявляется build-in type

frozenix ★★★
()
Ответ на: комментарий от OldFatMan

> Делиться надо красивым кодом «безвозБезДДо, то есть даДом» (с) Сова :)

Безд-возд-мезд-но.

Учи матчасть :)

iBliss
()

> ЛОР, расскажи про красивый код на PHP который ты видел.

Равносильно вопросу «ЛОР, расскажи про красивых шлюх за 5 баксов в час»

iBliss
()
Ответ на: комментарий от iBliss

> Безд-возд-мезд-но.

-но.

Ну не произносился у Совы звук «н», да и «м» тоже (я имею в виду в мультике). Так что, твой вариант тоже неточен. :)

Тогда уж - с учётом твоих поправок:

Безд-возд-безд-до.

А если ты про книжку, то я её да-авным-давно читал - уже такие тонкости не помню.

Учи матчасть :)

Твоя правда - надо бы перечитать. :)

OldFatMan
()
Ответ на: комментарий от SteveBallmer

почему Джанга так уродлива по сравнению с RoR и Ruby-стеком?

Потому что ее писали изнасилованные журнализды, а не хипстеры, очевидно.

baverman ★★★
()
Ответ на: комментарий от SteveBallmer

Развидьте мне это. Попытка изобразить красивые вещи вроде синатры или фласка на ПХП может закончится только одним — фейлищем. Создатели языка эпичные неосиляторы, начиная от организации пакетов, обратных слешей и заканчивая явным указанием замыкаемых переменных. Все говорит, что они даже вменяемый парсер не могут написать.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.