YiiFramework Опасность в архитектуре yii Active Record

Ragazzo

TDD interested
grigori
немного неверно PR сделан, ну там оформление CHANGELOG но это фигня, открой issue чтобы нормально можно было отследить ее, только repo-collab. закрывают :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
исправил CHANGELOG
будут вопросы или замечания по делу - исправлю, конечно, а вообще, мне на yii/master уже пофиг
 

Ragazzo

TDD interested
grigori
ты когда-нибудь рассекретишь уже giny? :)
UPD. а нашел. дак ты тимлид в сотмаркет?)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
уже почти полтора года как
там наших правоки еще нет, я ту репу только на прошлых выходных сделал, щас запустим этот наш проект, и сделаем giny
 

Redjik

Джедай-мастер
Ну теперь знает, чо. Я ж не говорю, что это хорошо. Просто так есть.
Я бы вот вообще из всего Yii оставил бы active records c датамапером, а все остальное заменил чем-нить или переписал.
А ты стэк возовов для конструкции
Post::model()->with('author')->findAll()
напиши - резко разонравится
 

Ragazzo

TDD interested
Кстати, раз такие страсти разгорелись и пошел передел полный, то grigori возьми на заметку в CPgsqlSchema переброс DEFAULT_SCHEMA из константы в public поле, так удобнее будет :)
 

Ragazzo

TDD interested
Вот вам делать нечего "бодаться" :D но я все равно пока за попкорном схожу, магазин рядом, да :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Я сходу не смогу заняться постгресом. Но вообще, советоваться собираюсь активно.
Ну, ты прав, хватит. Займусь делом.
 

Ragazzo

TDD interested
grigori
>>Я сходу не смогу заняться постгресом
да там не заняться, просто кто-то решил что фигакнуть в константу дефолтное название схемы(которое вообще может меняться) это круто. Т.е. весь рефакторинг
PHP:
self::DEFAULT_SCHEMA => $this->defaultSchema;
:D ну да ладно, бывает)
 

MiksIr

miksir@home:~$
А ты стэк возовов для конструкции
напиши - резко разонравится
А почему я их должен писать? Если я решу заниматься производительностью, то напишу все на C, а полка оцениваю все по удобству использования исключительно =)
 

MiksIr

miksir@home:~$
Кстати, раз такие страсти разгорелись и пошел передел полный, то grigori возьми на заметку в CPgsqlSchema переброс DEFAULT_SCHEMA из константы в public поле, так удобнее будет :)
А, вот, кстати, насчет схем очень неудобно с постгресом в Yii... или я не разобрался, но когда у меня две схемы и search_path, нихрена не работает... вот... печально.
 

Ragazzo

TDD interested
MiksIr
хм, дак он же сам CPgsqlSchema может резолвить (тупо explode()) схему и таблицу, т.е. обращайся как schemaname.tablename и все, воркс фо ми давно, но я пока тусуюсь в 1ой схеме ага. А почему search_path не работает? ну т.е. это уже только к постгрес, посмотри может там проблемы изза маппинга юзеров на бд, т.е. по умолчанию насколько помню ищет также в схеме которая называется как и юзер, не? ну фоллбек постгресовский такой)
grigori
ок, будет время кину конечно) возможно в течении недели, а то у меня к тому же там висит старый PR в master который стыдно уже столько держать надо закрыть :D
 

MiksIr

miksir@home:~$
Не, просто в постгресе я работаю с таблицами без указания в какой они схеме. Тут же или нужно указывать руками или все должно быть в одной схеме. Проблема как я понимаю в том, что Yii использует имя схемы для получения всяких метадат и т.п., т.е. для аналогичного search_path поведения Yii должен его эмулировать.
 

Ragazzo

TDD interested
MiksIr
а понял, ну да, я сомневаюсь что они проходят и по search_path, ну вообще можешь же глянуть в сорсы, там же есть громадный запрос на построение архитектуры БД и схемы вроде считываются все, надо смотреть вообщем сорсы))
 

fixxxer

К.О.
Партнер клуба
https://github.com/yiisoft/yii/issues/2251#issuecomment-15336369
а вы говорите "он не оценит " :) все в порядке, тут будет полное отрицание реальности
Я перестал понимать, о чем вообще речь.
PHP:
Class A{
    function __construct(){
        echo 123;
    }
    static function foo(){
        echo '456';
    }
}

call_user_func(array('A','foo'));
Это работает даже в 5.0. По моему и в 4-ке работало, но уже не помню. Но если там просто статический вызов, то
1) (new A)->foo() работать не будет
2) нахрена тогда вообще new A?

А вот если он не статический (нет кейворда static в объявлении метода), тут нюансы. Если нет метки static, все равно можно вызвать метод статически, и если в нем нет обращения к $this, все сработает.

PHP:
class A {

    public function __construct() {
        echo '123';
    }

    public function foo() { // no 'static' here
        echo '456';
    }

}

call_user_func(array('A','foo'));
Но это ненормально (ноги этого растут из php4) и это когда-нибудь должны исправить - запретить статический вызов нестатического метода еще на этапе компиляции (и - для конструкция вида call_user_func - в рантайме).

UPD: Это, кстати, приводит к JS-подобному $this scope - можно сделать вот такой вот WTF:

PHP:
class A {

    public $x = '123';

    public function foo() {
        echo $this->x;
    }

}

class B {

    public $x = '456';

    public function foo() {
        A::foo();
    }

}

$b = new B;
$b->foo();
Выведет 456 =)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
UPD: Это, кстати, приводит к JS-подобному $this scope - можно сделать вот такой вот WTF:
класс! правда, там Strict уже, но было прикольно

Я перестал понимать, о чем вообще речь.
я имел ввиду, что у Qiang уже реально сносит башню, он пишет, что я проблему не решил, в моем коде конструктор продолжает вызываться, и что его ошибка делает программистов опытными
 

fixxxer

К.О.
Партнер клуба
Эээ.
Я правильно понимаю, что в текущей архитектуре yii:
1) создается новый инстанс
2) для того чтобы дернуть его метод
3) который внутри просто дергает статический метод?

аа мой мозг )

UPD: не, ну видимо предполагается что в нестатическом методе можно что-то перебить для конкретного - тогда твой патч должен ломать это
 
Сверху