@yii2ru

Страница 550 из 1721
Айбулат
01.09.2017
05:11:02
здесь походу лучше "Доброго времени суток"

Crestoff
01.09.2017
05:11:35
@bold

private function iterateAdNetworks() { foreach ($this->adNetworks as $adNetwork) { $this->adNetworkId = $adNetwork->id; $this->adNetworkName = $adNetwork->name; $adNetworkClient = new $adNetwork->name; // $adNetwork->name = 'SmapleClass' >>> ERROR: Class SampleClass not found $this->iterateAdAccounts($adNetwork); } }

короч пытаюсь создать экземпляр класса, название которого в проперти текущего класса

Google
Айбулат
01.09.2017
05:12:21
$adNetwork->name = 'SmapleClass' -> >>> ERROR: Class SampleClass not found

очепятка, не?

Crestoff
01.09.2017
05:12:48
да тут так форматировалось

подскажи как код вставить

без переносов

и тж

д

private function iterateAdNetworks() { foreach ($this->adNetworks as $adNetwork) { $this->adNetworkId = $adNetwork->id; $this->adNetworkName = $adNetwork->name; $adNetworkClient = new $adNetwork->name; >>> ERROR: Class SampleClass not found $this->iterateAdAccounts($adNetwork); } }

вот так

там где еррор - идёт исключение что класс не найден

$adNetworkClient = 'SampleClass';

тож еррор

а если

Google
Айбулат
01.09.2017
05:14:49
\``` qq \```

Crestoff
01.09.2017
05:14:50
$adNetworkClient = new SampleClass;

то всё ок

Айбулат
01.09.2017
05:14:56
вот так код вставляй

это ведь разные вещи совсем

$adNetworkClient = 'SampleClass';

$adNetworkClient = new SampleClass;

Crestoff
01.09.2017
05:15:44
test

Айбулат
01.09.2017
05:15:50
фак

без экранирования)

Crestoff
01.09.2017
05:16:04
спасибо, понял

в общем так:

```

$name = 'ClassName'; $o = new $name;

так не работает

```

$o = new ClassName;

так работает

в общем вот вся суть только в контексте этого метода

Айбулат
01.09.2017
05:18:16
по namespace что?

Google
Crestoff
01.09.2017
05:18:32
private function iterateAdNetworks() { foreach ($this->adNetworks as $adNetwork) { $this->adNetworkId = $adNetwork->id; $this->adNetworkName = $adNetwork->name; $adNetworkClient = new $adNetwork->name; >>> ERROR: Class SampleClass not found $this->iterateAdAccounts($adNetwork); } }

ща

namespace app\console\AdNetworkClient;

текущий класс и класс который не хочет работать находятся в одной неймспейсе

грубо говорю файлы классов лежать в одной директории

app\console\AdNetworkClient

Айбулат
01.09.2017
05:20:05
попробуй в строку добавить namespace этот

Crestoff
01.09.2017
05:20:46
к переменной с названием класса ?

Айбулат
01.09.2017
05:21:43
да

Crestoff
01.09.2017
05:22:53
$adNetworkClient = new app\console\AdNetworkClient\SampleClass();

даже если так делаю - он ругается на неймпейс

шторм

Crestoff
01.09.2017
05:23:44
а вверху стоит этот неймспейс

Айбулат
01.09.2017
05:23:50
это понятно

Crestoff
01.09.2017
05:23:53
namespace app\console\AdNetworkClient

Айбулат
01.09.2017
05:23:56
строкой попробовал?

Crestoff
01.09.2017
05:24:05
ща

$test = "app\console\AdNetworkClient\SampleClass()"; $adNetworkClient = new $test;

тож самое, класс нот фаунд

Айбулат
01.09.2017
05:25:51
скобки в конце убери

Google
Айбулат
01.09.2017
05:26:00
без скобок обычно делают

"\app\console\AdNetworkClient\SampleClass"

Crestoff
01.09.2017
05:28:29
помог неймспейс, спасибо!

Айбулат
01.09.2017
05:31:09
сделай красиво только с помощью __NAMESPACE__

Maxim
01.09.2017
05:32:03
Всех с днём знаний!

В документации написано Кроме хранения в PHP-файлах (используя [[yii\i18n\PhpMessageSource|PhpMessageSource]]), Yii предоставляет ещё два класса: [[yii\i18n\GettextMessageSource]], использующий GNU Gettext для MO или PO файлов. Кто-то пробовал последний класс использовать? Чем он отличается от обычного хранения переводов через класс php? Быстрее ли он работает?

Crestoff
01.09.2017
05:33:57
Admin
ERROR: S client not available

Айбулат
01.09.2017
05:34:07
Maxim
01.09.2017
05:36:33
Получается это для совместимости и быстрого перехода на йии с сайтов, где был такой файл перевода?

Юрий
01.09.2017
05:36:36
А по скорости надо бенч запускать. По идее разницы не будет или прям минимальная.

Maxim
01.09.2017
05:37:05
Хорошо. Спасибо

Юрий
01.09.2017
05:38:06
Получается это для совместимости и быстрого перехода на йии с сайтов, где был такой файл перевода?
Ну в целом да. А так с сайтами вроде transifex / crowdin я не вижу разницы как это дело хранить

Выдаст в нужной структуре на все указанные языки в нужных форматах

А переводчики в удобном интерфейсе сидят и даже не знают про оригинальный формат

Maxim
01.09.2017
05:39:18
)))

Crestoff
01.09.2017
06:34:07
смотрите: $this->adNetworkClient = new $this->adNetworkClassName;

как сделать чтобы шторм подсказывал методы созданного объекта?

Google
Crestoff
01.09.2017
06:35:11
типа $this->adNetworkClient->setLogin...

Айбулат
01.09.2017
06:35:35
/** @var Class */

Crestoff
01.09.2017
06:37:24
а если я заранее не знаю название класса )

он у меня динамически получается

Айбулат
01.09.2017
06:37:51
ну список всех классов прописываешь и все

или у тебя их куча?

может они интерфейс какой-нибудь реализуют?

Crestoff
01.09.2017
06:38:42
о точно, я как раз под интерфейс их подвёл

его и опишу

спасибо опять

тебе

Айбулат
01.09.2017
06:38:51
ну вот и решение)

Crestoff
01.09.2017
06:59:12
не очень ведь правильно передавать в конструктор больше 4-5 параметров ?

как-то не удобно

и не красво

опять же ничего не забудешь, а через сетеры можно упустить чегонить...

вот и не ясно как найти компромисс)

Айбулат
01.09.2017
07:01:02
массив?

Страница 550 из 1721