Class

Vin-Diesel

Новичок
PHP:
class child {
 var $mysql = null;
 function __construct() {
  #1 # какой-то код присваивающий $this->mysql ссылку на root->mysql
 }
}
class root {
 var $mysql = null;
 public function log() {
  $mysql = new mysqli();
  $this->child = new child();
  var_dump($this->child->mysql);
 }
}
как это реализовать?
 

tz-lom

Продвинутый новичок
Vin-Diesel
а где здесь парент?
можешь делать наследников,да,только код будет выглядеть
 

Vin-Diesel

Новичок
Я это для примера привел, ну что-то типа эмуляции... Эм.. Не знаю как обозвать это)
Значит лучшее решение через DI?
 

Vin-Diesel

Новичок
Хм... попробывал, хорошая штука..)
phemto
Прямо новый мир для меня.........!) В новый год.. хаха)
 

Vin-Diesel

Новичок
Проблема в том, что если мне надо передать несколько классов. Код будет ужасен) Глядя лишь на параметры....
 

HraKK

Мудак
Команда форума
Ну пхпклаб как всегда меня умиляет.

Приходит человек и спрашивает как мне можно есть суп китайскими палочками?
4 человека подсказывают как правильно держать палочки.
2 человека подсказывают что есть еще зубочистки и они ими тоже умудрялись есть.
1 человек говорит что он делает клизмы и доволен.

Но никто не спросил для чего человеку есть суп китайскими палочками, какую задачу он решает.
 

fixxxer

К.О.
Партнер клуба
Гы. С другой стороны, человек по сути захотел инверсию зависимостей, получил IoC-контейнеры, обрел новое знание. А то что он щас побежит их вставлять куда ни попадя и где оно нахрен не надо - ну это нормально, это быстро проходит :)
 

Vin-Diesel

Новичок
Объясняю зачем.
Делаю ядро системы, в его свойстве определяю ссылку на класс mysqli
В ходе работы системы, создаются классы внутри ядра с другими задачами (типа лог-менеджера, получение данных с фтп сервера), вообщем модули, которые хотят использовать существующее соединения с базой или определенные настройки. Нужно как-то передавать в них ссылки на класс взаимодействия с базой данных. Тот же экцепшен, надо передать в него класс лог-менеджера, чтобы сохранить ошибку.
 

tz-lom

Продвинутый новичок
ненене
никаких сохранений ошибок в эксепшенах!!
эксепшн ловится,и сохраняется,только так и никак иначе
 

tz-lom

Продвинутый новичок
для этого ты в Exception заносишь всю инфу об ошибке которую считаешь нужным заносить ,а когда ловишь ошибку ты эту инфу сваливаешь в файл
не делай дамп сразу в эксепшене,иногда их ожидают
 

Vin-Diesel

Новичок
Идея, такая:
Заносить id ошибки в экцепшн, т.е. так:
PHP:
throw new Error(10);
После чего в моем классе экцепшена, метод обращается к базе смотрит id ошибки - получает инструкции к действию, если она критическая (Например вывести такую-то страницу) и заносит в табличку лог с её id

Вообще я этим вопросом задался, потому что хотел красиво как-то оформить это. А не так что:
PHP:
$this->logger->mysqli = $this->mysqli;
Чтобы тот класс сам забрал ссылку из класса, который его создал.
 

Sokil.Dmytro

Новичок
Вообщето исключения придуманны чтобы их перехватывать, а не для того чтобы с их помощью что-то куда-то писать. По этому максимум что можно делать с исключениями, это переопределять класс, чтобы отделять одни исключения от других. Логировать и производить другие действия надо в блоке catch. По моему, лучше было бы ловить все не словленные специфические исключения гдето в раене точки входа, и уже с ними что-либо делать. Также я бы не стал дергать лишний раз базу ради получения описания ошибки. Это не столько редко изменяемые данные, что проще их вхардкодить
 

Vin-Diesel

Новичок
Хм да бред получился.
Для критических переопределю тогда класс.
Напишем функцию которая будет возвращать по id сообщение, из заранее определенного массива.
 

HraKK

Мудак
Команда форума
Скажи решительное нет магическим цифрам, сохрани нервы людям которые будут после тебя работать.
PHP:
class My_Exception extends Exception
{
    const NO_ID = 2;
    const NO_ADDR = 4;
}
throw My_Exception( 'Id required', My_Exception::NO_ID );
 

Vin-Diesel

Новичок
Чем плох такой подход?
Да и так подумал, зачем использовать DI. Можно же через $GLOBALS сделать..?
 

tz-lom

Продвинутый новичок
PHP:
throw new Error(10);
После чего в моем классе экцепшена
Просто скажите что не читаете мои посты :)
Чем плох такой подход?
Тем что вы забудете что значит каждая цифра через неделю,а так хотябы IDE подсказывать будет
я вообще так поступаю, эксепшн это такая штука которую либо ждут либо нужна она логеру,поэтому проще написать так
PHP:
class MySQLException extends ErrorException {}
class FileSystemException extends ErrorException {}
в описания можно уже не вгонять что они значат,а только на каких данных упали(SQL запросы,имена файлов,id/имя пользователя)
когда её ждут там уже знают что ждут допустим ACLException и важно только где и почему упало
а в саамом верху ждут ErrorException который логируется а пользователю пишется нейтральное "фейл,лол"

Да и так подумал, зачем использовать DI. Можно же через $GLOBALS сделать..?
ага,можно ещё все зависимости захардкодить в одну функцию с гигантским switch , друге дело кому оно надо?
 
Сверху