почему так реализовано?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
user
Сообщения: 159
Зарегистрирован: 2017.12.05, 16:55

почему так реализовано?

Сообщение user »

Например, вот так $model = Model::method;
Хотя это не статический метод, public function method()
Почему так сделано?
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: почему так реализовано?

Сообщение futbolim »

Это не реализовано, а указано, что method() принадлежит Model
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: почему так реализовано?

Сообщение ElisDN »

Если это не Model::class, то потому что у кого-то рост рук не из стандартных мест реализован.
user
Сообщения: 159
Зарегистрирован: 2017.12.05, 16:55

Re: почему так реализовано?

Сообщение user »

ElisDN писал(а): 2017.12.24, 23:47 Если это не Model::class
что ты имеешь ввиду?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: почему так реализовано?

Сообщение ElisDN »

user писал(а): 2017.12.25, 00:11 что ты имеешь ввиду?
Стандартную конструкцию ::class, введённую в PHP 5.5 для получения имени класса:

Код: Выделить всё

use app\models\User;

$class = User::class;
echo $class; // 'app\models\User'
user
Сообщения: 159
Зарегистрирован: 2017.12.05, 16:55

Re: почему так реализовано?

Сообщение user »

Дмитрий, а почему у меня так работает:
Контроллер:

Код: Выделить всё

$model = Truck::findTruckOne($id);
Модель:

Код: Выделить всё

    public function findTruckOne($id)
    {
        $model = Truck::find()
            ->andWhere(['truck.id' => $id])
            ->one();
        return $model;
    }
user
Сообщения: 159
Зарегистрирован: 2017.12.05, 16:55

Re: почему так реализовано?

Сообщение user »

futbolim писал(а): 2017.12.24, 23:46 Это не реализовано, а указано, что method() принадлежит Model
можно подробнее?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: почему так реализовано?

Сообщение maleks »

user писал(а): 2017.12.25, 10:27 а почему у меня так работает:
Потому что это php. Включите error_reporting в E_ALL и читайте что вам будут писать.

А вот в доках про это:
Внимание

В PHP 7 возможность вызова нестатического метода статически объявлена устаревшей и вызовет ошибку уровня E_DEPRECATED и в дальнейшем может быть удалена.
user
Сообщения: 159
Зарегистрирован: 2017.12.05, 16:55

Re: почему так реализовано?

Сообщение user »

maleks писал(а): 2017.12.25, 20:34
user писал(а): 2017.12.25, 10:27 а почему у меня так работает:
Потому что это php. Включите error_reporting в E_ALL и читайте что вам будут писать.

А вот в доках про это:
Внимание

В PHP 7 возможность вызова нестатического метода статически объявлена устаревшей и вызовет ошибку уровня E_DEPRECATED и в дальнейшем может быть удалена.

у меня 7.1 стоит и ничего не выскакивает.
кстати, а почему phpstorm сам подставляет ::
а как правильно тогда?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: почему так реализовано?

Сообщение maleks »

user писал(а): 2017.12.26, 00:11 у меня 7.1 стоит и ничего не выскакивает.
добавьте в index.php в самом начале:

Код: Выделить всё

error_reporting(-1);
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: почему так реализовано?

Сообщение azz »

user писал(а): 2017.12.26, 00:11 а как правильно тогда?
правильно вызывать статические методы через "::", не статические "->"
user
Сообщения: 159
Зарегистрирован: 2017.12.05, 16:55

Re: почему так реализовано?

Сообщение user »

azz писал(а): 2017.12.27, 14:46
user писал(а): 2017.12.26, 00:11 а как правильно тогда?
правильно вызывать статические методы через "::", не статические "->"
тогда почему в документации неправильному учат?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: почему так реализовано?

Сообщение zelenin »

user писал(а): 2018.01.09, 19:50
azz писал(а): 2017.12.27, 14:46
user писал(а): 2017.12.26, 00:11 а как правильно тогда?
правильно вызывать статические методы через "::", не статические "->"
тогда почему в документации неправильному учат?
например?
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: почему так реализовано?

Сообщение someweb »

Метод всегда указывается через "::", это означает принадлежность метода к классу.
http://www.yiiframework.com/doc-2.0/gui ... ating-data
3. Call yii\db\ActiveRecord::save() to save the data into database.
Надо смотреть пример кода

Код: Выделить всё

 $customer->save(); 
или описание самого метода - static он или нет.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Ответить