
Айбулат
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

Юрий
01.09.2017
05:34:39
Удобен для переводчиков, потому что софт есть удобный для их локализации

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
Выдаст в нужной структуре на все указанные языки в нужных форматах
А переводчики в удобном интерфейсе сидят и даже не знают про оригинальный формат

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
массив?