👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

Вам лучше знать, в Вашем же Гитхабе исходники выложены :)

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Кому интересно, сделал колграйнд 6ти фреймворков (включая пиксю конечно), так что можете посмотреть наглядно что происходит внутри фреймворков при их исполнении:
phpixie.com/...ork-comparison

это не серьёзно писать новый фреймворк на PHP 5.2

класс ORM далёк от элегантности

вроде не дурак, и пэхэпэшекчкой грешу давно, но смысл этого от меня неуловимым образом ускользает

$res=new ORMResult(get_class($this), $res=$this->query->limit(1)->execute()); return $res->current();
Все просто =) ОРМРезалт итератор который принимает имя класса в который оборачивать данные и итератор самых этих данных (возвращается).
Я так понимаю вопрос в том почему не сделать напрямую без ОРМРезалта?
Чтоб не дублировать логику проверки из ORMResult::current()
Соглашусь что лучше надо было сделать так:

return $this->limit(1)->find_all()->current();

Так и переписал =)

Кстати обновил бенчмарки чтоб без XCache =)

phpixie.com/...work-benchmark

Напишу здесь чтоб дальше ветку не ззатягивать, а то там уже слишком мало места чтоб писать))

$str="Fairy_Model";
$time=mktime();
for($i=0;$i<10000000;$i++)
preg_replace('#_Model$#i','',$str);
echo(mktime()-$time);
echo "\n";
$time=mktime();
for($i = 0; $i < 10000000; $i++) {
if(strtolower(substr($str,-6))=='_model') substr($str,0,-6);
}
echo(mktime()-$time);

19 секунд прег_реплейсом и 14 субстром
щас поменяю =)

Ха, если стртуловер вынести из ифа то еще минул секунда ;)

Я читал гитхаб и горько плакал.

Вот из-за таких поделок как это чудо программирования и появляются аргументы в соседней теме про Ruby и php.

Ммм а более констуктивно можно =)?

Да пожалуйста.

github.com/...es/misc.php#L18

$users = (’first’, ’second’, ’third’);
$second = Misc::arr($numbers, ’fifth’, 100500);
var_dump($second);
int(100500)
вот уж воистинну ARRRRRRR
www.2dayblog.com/...550x-Arrrrr.jpg

но он так и должен работать 0_о

Если уж так приспичило:

$a = new ArrayObject(array(1, 2, 3));
var_dump($a[4]);

NULL

Ну вот например есть переключатесль сортровки на сайте, присылает по ГЕТу. Тогда берем:
$dir=$this->request->get(’dir’,’ASC’);
если dir не указан в параметрах запрса то дефолтно посортирует по возростанию

метод ->get использует как раз тот АРР

Так а почему лол? преобращает параметры в сам стринг запроса. В этом и вся суть драйвера то.

Рефакторинг, по какой-то причине, обошел Вас стороной, вот потому и лол.

Если вы о том что лучше б разбить на нсколько методов (е.г. один добавляет субстринг с лимитом, другой с оффсетом и тд ) чтоб потом их овеерайдить, то если четсно особого смысла я не ижу, так как если с какйо- то из баз работать не будет то и так надо править прям в драйвере ПДО. Тоесть если будет надобность так сделать то разобю, сейчас нет

Вы за деревьями леса не видите. Смотреть на function query в целом, без слез, просто невозможно. Это моветон :D

Хм ну в принципе я не против ее переписать получше =) только можно поконкретнее о ее проблемах =)?

Фалкон на Си, тоесть если надо будет допилит что-то то надо будет патчить и перекомпилировать.

В принципе если поставить Xcache или скомпилировать пхп в HipHop то будет фактически то же самое.

Причем тут Xcache? Это опкод кеш, это вообще другая история.

Я имел ввиду скорость работы а не технологию

мне из последних разработок понравился Phalcon

docs.phalconphp.com/...ello-world.html

Там написано для чего. Это самая маленькая (насколько я знаю) имплементацыя самых популярных элементов фреймворков, для того чтобы:
а) быть намного легче

б) дать девелоперу побольше свободы.

Яркий пример, вот хочу я создать сайт на CakePHP а там с размаху по дефолту готовый лейаут для сайта, куча папок и вьюшек. Конечно круто но если я делаю что-то простенькое на несколько страниц мне-то этого хлама не надо. Приходится все выпиливать.Идея з пиксей та чтоб дать девелопить как хочешь и быть по максимуму KISS

Можно =) Дописываю другое сравнение, скоро закину на сайт. В принципе увидеть их легко. Главное имхо компатибильность з большинством Коханы + наличие собственного ОРМ ( который «верит» девелоперу и не делает Describe запросов в базу и не нуждается в схемах в принципе )
Большинство легких фреймоврков целятся на то чтоб просто сделать рутинг (например как Glue) и оставить девелопера там. Тут же упор сделан на то чтобы сделать имплементации того что часто используется но не слишком много. Тоесть тут есть и рутинг и ОРМ и иерархичная файловая система сделаны так чтоб работать полегче и решать 99% задач, остальной процент задач решает девелопер (если например надо уж очень хитрые связи между ОРМ). Питоновская парадигма: Simple things should be easy, hard htings should be possible

ну хз =) если интересно можете посмотреть туториал например ОРМа phpixie.com/tutorials/orm и весь этот функционал где-то 400 строчек класса ОРМ. Совместимость именно с коханой уже конечно мое предпочтение, разхваливать его трудно))

К Yii у меня реально агрессия ))))) Не люблю когда за меня что-то генерится и т.д. А єто кстати и не сравнения были, только бенчмарк и имхо, а сравнения будут вместе с той статьей про лайтовые фреймворки =) Скину здесь ссылку когда допишу

Тогда не забудьте испытать агрессию к скаффолдингу в целом, и к куче фреймворков во главе с Ruby on Rails в частности )

Ммм если честно то наверно таки испытываю =)

Ну вот в кейке скаффолдинг не так плох, как по мне то генерируемый код у них более понятен чем у Yii, но может так мне кажется потому-что с кейком больше знаком =)

Кстати мне интересно что скажете о Ларавел

Вижу пилите по ночам =))) 2:20 а завтра на работу наверное =)

Навіть не так — а нашо? =))

Є ж CodeIgniter, kohana, yii

Ахаха=) забавно=)
А зачем пхп? Есть же питон, руби, перл, джава...
А зачем питон? Есть же пхп, руби, перл, джава...
А зачем руби? Есть же питон, пхп, перл, джава...
А зачем перл? Есть же питон, руби, пхп, джава...
А зачем джава? Есть же питон, руби, пхп, перл, C++...

))))

Кстати есть несколько MVC фреймворков на чистом C. На одном даже по приколу сайт сделал =) Под конец задумался о том что на struct-ах даже удобнее чам на классах писать ))

loaded() сделано для компатибильности с Kohana в самом деле, в теории контролер взят с нее должен работать более менее и здесь. В принципе надо убрать, за время с коханой вошло в привычку =)

Решил ради интереса покопаться ещё.

1)

public function loaded() { return $this->_loaded; }

Если у вас функция которая возвращает булевое значение поля то начинайте название с приставки is.

Функция с название isLoaded говорит о своём предназначении без комментариев. Ну и в коде

if ($this->isLoaded())

читается лучше чем

if ($this->loaded())

2)

if ($target['type']=='has_many')

И по выносите такие логические строки в константы класса.

Сравнение

if ($target['type'] == self::TAGRET_TYPE)

, где TAGRET_TYPE = ’has_many’ выглядит приятнее. К тому же, если понадобиться изменить тип, то сменить его придется только в одном месте, а не шерстить весь код.

if ($target[’type’] == self::TAGRET_TYPE)

мб. self::TARGET_TYPE_HAS_MANY

for ($i = 0; $i < count($keys); $i++)

угумс, спасибки, недосмотрел

насчет PSR-0 то например я всегда считал что глупо писать имя в глубь а не наоборот, так как Query_Mysql_Driver лучше чем Driver_Mysql_Query так как именно первое слово тогда несет больше информации о том что класс делает собственно. К примеру в том же зенде каждый класс начинается из Зенд что нечитабельно ИМХО.
А вот чем аутолоудер не понравился? я не видел более компактно реализованных каскадных файловых систем.
Кстати о тех кто Yii писал, вот им то реально шланг в ухо надо, посмотрите например кусок кода из их фреймворка:

gist.github.com/4442970

Спасибо за критику @"двадцатитрёхлетний сениор", $p конечно надо будет заменить =)
А get_class() на что тогда заменить? в принципе там он действительно нужен, ну не eval() же =)

кстати в Yii и евал встречатся =)

Ага, так значит, аффтар — Вы.

насчет PSR-0 то например я всегда считал что глупо писать имя в глубь а не наоборот, так как

Узнайте, кто придумал эти PSR-ы, и почему они так важны именно в случае написания фреймворков.

Query_Mysql_Driver лучше чем Driver_Mysql_Query так как именно первое слово тогда несет больше

Это вообще порочная практика, которую слепо наследуют даже зрелые джеддаи, неговоря уже о падаванах. Давно уже в PHP есть кошерные неймспейсы. Даже великий и страшный Зенд Фреймворк во второй своей версии их использует и отказался от такой нотации.

А вот чем аутолоудер не понравился? я не видел более компактно реализованных каскадных файловых систем.

Use the SPL, Luke: RecursiveIteratorIterator, RecursiveDirectoryIterator, etc

А get_class() на что тогда заменить?

instanceof?

ну не eval() же =) кстати в Yii и евал встречатся =)

www.quotesstar.com/...wer-195651.html — «If eval() is the answer, you’re almost certainly asking the wrong question.» Rasmus Lerdorf

Насчет итератора по директориям то он вообще не нужен, так как наперед известны все места где файл может быть (модули, system и application) нет смысла рекурсию туда вставлять.

Instanceof не поможет здесь preg_replace(’#_Model$#i’, ’’, get_class($this))

Для неймспейсов надо писать use + поддержка только пхп 5.3
PSRы очень субъективные, ну люблю я табы например и что =)

preg_replace(’#_Model$#i’, ’’, get_class($this))

str_replace уже не модно для таких простых замен?

Для неймспейсов надо писать use

Рубисты, питонерасты, перлисты, жабашники и прочие import\require-щики смотрят на вас с улыбкой :)

поддержка только пхп 5.3

Всё, что ниже 5.3, уже не поддерживается, и багов там хватает. К тому же, на хостингах уже даже 5.4 есть, не говорят о 5.3. Странные у вас аргументы.

ну люблю я табы например и что =)

Значит, вы будете гореть в Аду :)

а если создадите Photo_Model_Model ? вот надо вам фотомоделей в базу накидать, все таки иеерархичная файловая система и т.д. и гет_класс всеодно надо будет

=))) ну конечно тоже можно, но так есть еще суппорт для классов которые вообще не заканчиваются на _модел. тоесть класс Users будет смотреть в табличку users =)

Цитата “PHPixie relies heavily on naming conventions to allow all kinds of coding styles for more development freedom”

Ага, и поэтому вы юзаете get_class($this) вместо __CLASS__ - действительно, зачем писать, как принято, будем делать свои свободные велосипеды! :)

Это, кстати, к вашему вопросу «а что не так с get_class()».

__CLASS__ в даном случае вернет просто ORM так как описан как раз в этом классе. Пример тут: www.efrag.gr/?p=272

PHP 5.3 only =)

а откуда такая нелюбовь к get_class() ?

PHP 5.3 only =)

И? LSB доступно с версии >= 5.3. Снова невнимательно читали доку?

а откуда такая нелюбовь к get_class()

У вас же лёгкий фреймворк, так и используйте лёгкие решения: скажем, регулярки с get_class() тяжелее, чем LSB с substr. К тому же, раз у вас всё так объектно-ориентированно, то есть смысл развивать эту парадигму, а не возвращаться в «функциональщину», не так ли?

я имел ввиду что в 5.2 работать не будет, но вариант с LSB действительно лучше. Может следует оставит суппорт 5.2 в принцыпе. Надо будет подумать =)

Опять спасибки =)

Знаете, у меня была и, впринципе, до сих пор есть идея, подкупающая своей новизной. Написать простого бота, гуляющего по интернетам с виртуальной машины под WinXp и IE6, и использующей тонну проксей, для пущей бдительности, что IE6 еще используется хотя бы тем несчастным 0.001% пользователей, дабы вызывать дикий батхерт у фронтедщиков. Продолжайте и Вы в том же духе. Хостерам и сисадминам удобней не трогать софт на серверах.

Эх благо гугл отказался от поддержки 8 IE так что теперь это можно упоминать каждому заказчику =)

П.С. меня всеодно будет мучать ностальгия по mysql_query =)

str_replace ниасилит замену только последнего вхождения подстроки.

$class=get_class($this);
if(strtolower(substr($class,-6))==’_model’) $this->_table=substr($class,0,-6);

так то? щас побенчмаркаю насколько так быстрее =)

А вот чем аутолоудер не понравился? я не видел более компактно реализованных каскадных файловых систем.

Да ну?
class Zend_Controller_Action

../Zend/Controller/Action.php

spl_autoload_register(function($class) {
require_once(str_replace(’_’, DIRECTORY_SEPARATOR, $class.’.php’));
});

Ну и добавить set_include_path(implode(PATH_SEPARATOR, array(’../vendor’, get_include_path())));

Сделать через сет инклуд пас плохо потому что:
1) есть еще вьюшки, которые тоже в каскадной системе а в инклуд пас добавлять их никак не надо
2) менять девелоперу настроойки пхп в рантайме как-раз то чего я хотел точно не делать

Аффтар, помимо нижесказанного:

1) Советую узнать о существовании foreach. Конструкции типа

for ($i = 0; $i < count($keys); $i++)

2) Перестать писать

if ($file == false)

3) Причесать весь код в один стиль, ибо похоже все это на свалку отходов, зато хорошо прокомментированную.

Программистам, написавшим это, надо воткнуть шланг в ухо и залить туда больше стандартов кодирования, в частности, PSR-1 и PSR-2, или очень внимательно изучить Zend-овый гайд. Классы для работы с БД — сплошной фейспалм, не говоря уже о таких классных вещах как get_class(), однобуквенные переменные типа $p и ещё 100500 «тонкостей».

З.Ы. Автолоадер люто доставляет.

Не удался наглый PR =\ Надо ник на гитхабчике поменять =) Кстати а штука то действительно неплохая =))

А ник то тут причем?)) По фотке очевидно узнали. Кстати, дизайн сайта прикольный.

Нас и тут неплохо кормят :)

А навіщо? ми і так контролюємо більшу половину ринку =)

Очередной фреймворк. Когда уже пхпшники закончат плодить их?

Написанный фрейморк(пофигу как) дает + 100500 к ЧСВ, + 100 к харизме, + 100 к крутости в глазах других. :)

А если еще «убийца зенда» так еще больше увеличивается

Вам лучше знать, в Вашем же Гитхабе исходники выложены :)

Підписатись на коментарі