Методу класса subclass передаётся в качестве параметра объект класса app. Так как этот метод вызывается из метода класса app то пишем просто $subclass->метод(this).
Это конечно не то, что я хотел, но хотя бы сводит количество передаваемых параметров до одного.
Прошу всё же подсказки от тех, кто знает как сделать так как я хотел изначально.
добавить в app статический метод который возвращает ссылку на екземпляр app (который по логике должен быть один на все приложение)
Да! Звучит очень похоже на то, что я хочу сделать.
Если я верно тебя понял, должно быть как-то так, как в коде ниже.
Только подскажи что написать в методе app->getApp() или какую тему гуглить, чтобы разобраться?
Вариант с передачей требуемого значения в качестве аргумента мне не нравится, так как это не соответствует стоящей задаче.
Поясню зачем это нужно.
app - это класс объект которого управляет всем управляет всем процессом формирования страницы. (я пообщался с Yii и захотелось мне сделать свой аналог, чисто для себя, навык подтянуть и получить платформу для создания сайтов). В свойствах этого класса содержатся основные параметры, например настройки соединения с бд, пути к разным файлам, и всё такое.
А класс subapp это пример классов для различных нужд. Например авторизация, работа с бд, галерея изображений, список документов ...
Вот и надо мне чтобы при создании объектов sub-классов они имели доступ к свойствам класса app. Но не хочется при создании объекта авторизации указывать ему кучу параметров (соединение с бд, таблица с данными пользователей, названия полей таблицы и ещё штук 10).
Думал над тем чтобы сделать статические свойства для класса app, но так меня тоже не устраивает, потому что настройки хранятся в отдельном файле и значения присваиваются в методе __construct.
echo ЗДЕСЬ НАДО ОБРАТИТЬСЯ К СВОЙСТВУ ОБЪЕКТА КЛАССА app в котором создан объект subapp
}
}
Теперь словами.
В одном из методов класса app создаётся объект класса subapp. Можно ли в методах класса subapp обратиться к свойствам класса app, методом которого создан объект класса subapp?
-->AUTH LOGIN (12)
<--334 VXNlcm5hbWU6
-->*************(26)
<--334 UGFzc3dvcmQ6
-->*************(14)
<--235 Authentication succeeded
-->MAIL FROM ######@mail.ru (31)
<--250 OK
-->RCPT TO ########@mail.ru (32)
<--250 Accepted -->DATA (6)
<--354 Enter message, ending with "." on a line by itself
-->тело письма (356)
<--250 OK id=1QljVS-0008U6-00
-->QUIT (6)"
алгоритм такой сначала пишем в сокет команду fputs(), выводим что написали, затем читаем ответ fgets() и выводим его на экран.
Не устраивает меня вот, что.
Там где у меня "метка 1" видно что при таком подходе необходимо выполнять fgets() ровно столько раз сколько строк в ответе от сервера. - линейный алгоритм получается
Да, можно использовать feof() чтобы просто прочитать до конца НО! (вот мы и добрались до главного) если считать последний символ из сокета, или лучше сказать выполнить fgets() когда уже всё прочитано, то отправка прерывается и дальше не идёт, а в логах апача появляется запись
"PHP Fatal error: Maximum execution time of 30 seconds exceeded in C:\\Apache2.2\\htdocs\\localhost\\www\\smtp_send.php on line 94".
Вопрос такой, как сделать функцию, которая бы посылала команды получала ответы сервера и выводила их на экран?
Ой не знаю, надеюсь ситуацию понятно описал.
P.S> Ещё вот, возможно кто-то знает как можно узнать размер сообщений в сокете, подобно размеру файла, получаемому через filesize()? Это помогло бы узнать сколько можно считать.
Понимаю что возможо слегка глупо пишу, но я, при написании скрипта, представляю сокет как файл в который поочерёдно пишут клиент и сервер, где клиент это скрипт.
Собираясь гуглить думал, что быстренько найду ответ на свой вопрос. Наверняка не я первый этим интересуюсь. Но как-то пусто оказалось, может не так искал.. В общем, у меня вопрос:
Можно ли описать функцию в отдельном файле и потом по мере надобности использовать её из этого файла в других php-скриптах? Думаю понятно для чего это, - чтобы уменьшить количество кода. (Добавление)
Хех Только создал тему, вернулся к коду и сам разобрался))
Через функцию include() всё без проблем делается. Создаёшь файл с описанием функции и потом его подключаешь, - всё можно использовать функцию.
А у меня сначала не получилось потому что я в файле не поставил тег <?php... ?>