Челендж на 2026

Александр Воробьев
На сайте с 03.02.2020
Online
56
#151
MrPi #:
Вы видиммо не понимаете о чем я пишу? Магия не в том, что метод возвращает. Магия не в том, что ты не понимаешь. Магия в том, что смотря на вызов ты ожидаешь одно, а получаешь другое. Animals::dog('woof') - кажется в класс Animals есть статичный метод dog. Лезешь в класс, а там нет его. Есть колбэк и ты уже работаешь не с классом, а с объектом. 
да но есть __call  нативный метод языка. (сам если честно им не пользуюсь, наверно только раз как то применил - деталей не помню). Ведь все равно: что значит "ожидаешь"? я ожидаю результат выполнения команды, она выполняется.... как там она под капотом __call или 100500 геттеров важно ли?.
Александр Воробьев
На сайте с 03.02.2020
Online
56
#152
MrPi #:

Представь, что в php ты присваиваешь переменной значение $name = 'Johny', а по факту создал класс John(). Или пишешь new Animals() , а по факту экранировал переменную - echo $name.

Или все равно не ясно?

Тут надо оценивать именно результат.  Допустим $name= ' johny' создает класс. ок. мне важно что бы  echo 'Hello',$name;  выдало "Hello johny". а там, как это выглядит под капотом пофиг.
Александр Воробьев
На сайте с 03.02.2020
Online
56
#153

Кстати, вспомнил где на практике эта магия мне как раз таки "зашла".  Больше всего я работаю с Битрикс. Для того что бы создать свою таблицу наследуешься от DataManager, описываешь поля, потом консолькой создаешь файл аннотаций. все. Далее можно $user->setName(), $user->getName(). (вот whereName кстати нет :) ) мне нравится. подсветка есть все ок. Альтернатива?

1. использовать $user->get('name') (главное опечатку не допустить и помнить какие поля есть)

2. Наплодить геттеров. которые будут вызывать get и первого пункта

.... тоже с сетерами

MP
На сайте с 05.05.2025
Offline
17
#154
Александр Воробьев #:
она выполняется.... как там она под капотом __call или 100500 геттеров важно ли?.
Для ДЕБАГА важно. Вам важно писать на php? Вот есть нативные вызовы, синтаксический сахар, конструкции. Это нативные. Это база. Вы пришли в школу и вас учат, что 2x2=4, а после, какой-то фреймворк решил, что 5. Какая разница, ведь выполняет? И дальше везед стал писать для вывода в результат 5 - 2х2. Пришел разраб и сделал, как велит сам язык, получил 5 и думает, как так? Вы понимаете, что если начинаете разработку на фреймворке, то возможно настанет момент, что даже наличие какого-то метода или поддержка условного redis будет не нужна и вы решите его закомментить, что бы никто из команды его случайно не стал использовать, а упадет у вас авторизация пользователей, потому. что магия и User::register был не статичный метод класса User, а магия. А многие следуют принципам YAGNI и удаляют то, что не нужно. Лишний метод - лишний потенциальный баг, когда кто-то из разрабов найдет его и решит использовать (он же ведь есть в ядре, значит доступен). Но будет висеть на нем лишь один вызов, который надо было реализовать как 100 предыдущих, через другую конструкцию.. А через несколько лет для оптимизации, решишь удалить класс, а по итогу сломал приложение.
MP
На сайте с 05.05.2025
Offline
17
#155
Александр Воробьев #:
Для того что бы создать свою таблицу наследуешься от DataManager, описываешь поля, потом консолькой создаешь файл аннотаций. все. Далее можно $user->setName(), $user->getName(). (вот whereName кстати нет :) ) мне нравится.

$user->getName() - т.е. при таком вызове вы не обращаетесь к экземлпляру класса $user с публичным методом getName, а вызываете условно СТАТИЧНЫЙ метод abracadabra или не метод, а объект?

или всё же метод getName() где через QB получаете значение поля user из БД?

Александр Воробьев
На сайте с 03.02.2020
Online
56
#156
MrPi #:

$user->getName() - т.е. при таком вызове вы не обращаетесь к экземлпляру класса $user с публичным методом getName, а вызываете условно СТАТИЧНЫЙ метод abracadabra или не метод, а объект?

или всё же метод getName() где через QB получаете значение поля user из БД?

Ну там, если полностью и в одном месте (можно оперировать коллекциями, есть вариации, но для примера), то как то так:

$user = UserTable::query()
  ->addSelect('name')
  ->addSelect('id')
  ->where('lastname','Petrov')
  ->fetchObject();

echo $user?->getName();
Александр Воробьев
На сайте с 03.02.2020
Online
56
#157
MrPi #:
Для ДЕБАГА важно. Вам важно писать на php? Вот есть нативные вызовы, синтаксический сахар, конструкции. Это нативные. Это база. Вы пришли в школу и вас учат, что 2x2=4, а после, какой-то фреймворк решил, что 5. Какая разница, ведь выполняет?
Стоп. Здесь речь уже ведь про результат выполнения, а не то как это выглядит при вызове. В этом случае глядим в контракт фреймворка, видим что там с поправкой на ветер и проходим мимо.
Александр Воробьев
На сайте с 03.02.2020
Online
56
#158
MrPi #:
Вы пришли в школу и вас учат, что 2x2=4, а после, какой-то фреймворк решил, что 5. Какая разница, ведь выполняет?

Ну хоть php в этом плане не плюсы где можно плюс и минус переопределить :)

class MyInt {
    int value;
public:
    MyInt(int v) : value(v) {}

    MyInt operator+(const MyInt& other) const {
        return MyInt(value + other.value * 2);
    }

    int get() const { return value; }
};

MyInt a(5), b(3);
MyInt c = a + b;
MP
На сайте с 05.05.2025
Offline
17
#159
Александр Воробьев #:
$user = UserTable::query()
  ->addSelect('name')
  ->addSelect('id')
  ->where('lastname','Petrov')
  ->fetchObject();

echo $user?->getName();
Полную реализацию можно для примера? Откуда прилетело getName()? 
softerra
На сайте с 02.10.2023
Online
119
#160
Когда презентация?
Устали ждать ..

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий