PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 6
cod Отправлено: 26 Марта, 2014 - 18:38:18 • Тема: Обращение к свойствам объекта класса из методов другого класса созданного методом первого • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 3040
Придумал вот такой способ:

PHP:
скопировать код в буфер обмена
  1.  
  2. class app {
  3.     public $property;
  4.    
  5.     function __construct() {
  6.         $this->property = '444';
  7.     }
  8.    
  9.    
  10.     public function createsub() {
  11.         $sub = new subapp;
  12.         $sub->let_property($this);
  13.     }
  14. }
  15.  
  16. class subapp {
  17.    
  18.     function let_property($app) {
  19.         echo "let:".$app->property;    
  20.     }
  21. }
  22.  
  23. $app = new app;
  24. $app->createsub();
  25.  


Методу класса subclass передаётся в качестве параметра объект класса app. Так как этот метод вызывается из метода класса app то пишем просто $subclass->метод(this).
Это конечно не то, что я хотел, но хотя бы сводит количество передаваемых параметров до одного.
Прошу всё же подсказки от тех, кто знает как сделать так как я хотел изначально.
cod Отправлено: 26 Марта, 2014 - 05:21:59 • Тема: Обращение к свойствам объекта класса из методов другого класса созданного методом первого • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 3040
caballero пишет:
добавить в app статический метод который возвращает ссылку на екземпляр app (который по логике должен быть один на все приложение)



Да! Звучит очень похоже на то, что я хочу сделать.
Если я верно тебя понял, должно быть как-то так, как в коде ниже.
Только подскажи что написать в методе app->getApp() или какую тему гуглить, чтобы разобраться?

PHP:
скопировать код в буфер обмена
  1.  
  2. class app {
  3.     public $property;
  4.    
  5.     function __construct() {
  6.         $this->property = '444';
  7.     }
  8.    
  9.    
  10.     static function getApp() {
  11.         //Что написать сюда?
  12.     }
  13.    
  14.     public function createsub() {
  15.         $sub = new subapp;
  16.         $sub->let_property();
  17.     }
  18. }
  19.  
  20. class subapp {
  21.    
  22.     function let_property() {
  23.         $app = app::getApp();
  24.         echo "let:".$app->property;    
  25.     }
  26. }
  27.  
  28. $app = new app;
  29. $app->createsub();
  30.  
cod Отправлено: 25 Марта, 2014 - 19:42:22 • Тема: Обращение к свойствам объекта класса из методов другого класса созданного методом первого • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 3040
OrmaJever пишет:
PHP:
скопировать код в буфер обмена
  1. class app {
  2. public $property;
  3.  
  4.       public function createsub {
  5.       $sub = new subapp;
  6.       $sub->showProperty($this->property);
  7. }
  8. }
  9.  
  10. class subapp {
  11.  
  12. public function showproperty($p){
  13. echo $p;
  14. }
  15. }

(Добавление)
можно subapp унаследовать от app


Вариант с передачей требуемого значения в качестве аргумента мне не нравится, так как это не соответствует стоящей задаче.
Поясню зачем это нужно.
app - это класс объект которого управляет всем управляет всем процессом формирования страницы. (я пообщался с Yii и захотелось мне сделать свой аналог, чисто для себя, навык подтянуть и получить платформу для создания сайтов). В свойствах этого класса содержатся основные параметры, например настройки соединения с бд, пути к разным файлам, и всё такое.
А класс subapp это пример классов для различных нужд. Например авторизация, работа с бд, галерея изображений, список документов ...
Вот и надо мне чтобы при создании объектов sub-классов они имели доступ к свойствам класса app. Но не хочется при создании объекта авторизации указывать ему кучу параметров (соединение с бд, таблица с данными пользователей, названия полей таблицы и ещё штук 10).
Думал над тем чтобы сделать статические свойства для класса app, но так меня тоже не устраивает, потому что настройки хранятся в отдельном файле и значения присваиваются в методе __construct.
cod Отправлено: 25 Марта, 2014 - 19:17:38 • Тема: Обращение к свойствам объекта класса из методов другого класса созданного методом первого • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 3040
В общем, название темы может показаться весьма путанным; поясню.

есть классы app и subapp
PHP:
скопировать код в буфер обмена
  1.  
  2. class app {
  3. public $property;
  4.  
  5.       public function createsub {
  6.       $sub = new subapp;
  7.       $sub->showProperty();
  8. }
  9. }
  10.  
  11. class subapp {
  12.  
  13. public function showproperty(){
  14. echo ЗДЕСЬ НАДО ОБРАТИТЬСЯ К СВОЙСТВУ ОБЪЕКТА КЛАССА app в котором создан объект subapp
  15. }
  16. }
  17.  


Теперь словами.
В одном из методов класса app создаётся объект класса subapp. Можно ли в методах класса subapp обратиться к свойствам класса app, методом которого создан объект класса subapp?
cod Отправлено: 26 Июля, 2011 - 18:44:36 • Тема: отправка почты по SMTP • Форум: Вопросы новичков

Ответов: 1
Просмотров: 141
Хочу совсем немного. Всего лишь реализовать отправку почты с сайта. Делаю для этого функцию. В принципе письма уходят.
Но вот как я этого добился:

PHP:
скопировать код в буфер обмена
  1.  
  2. $fp= fsockopen('smtp.mail.ru', 25);
  3.  if ($fp){
  4.        
  5.     $in = fgets($fp, 256); //смотрим что нам ответил сервер
  6.      echo "<--".$in."<br>"; //выводим это
  7.  
  8.         $sent = fputs($fp, "EHLO mail\r\n"); //посылаем ему команду
  9.         if ($sent) echo "-->EHLO mail(".$sent.")<br>"; //выводим в браузер информацию о том что отправили
  10.  
  11.     $in = fgets($fp, 256)."<br>";
  12.     echo "<--".$in."<br>";
  13.  
  14. //Метка 1!
  15.         $in = fgets($fp, 256)."<br>";
  16.         echo "<--".$in."<br>";
  17.         $in = fgets($fp, 256)."<br>";
  18.         echo "<--".$in."<br>";
  19.         $in = fgets($fp, 256)."<br>";
  20.         echo "<--".$in."<br>";
  21.         $in = fgets($fp, 256)."<br>";
  22.         echo "<--".$in."<br>";
  23.  
  24.         $sent = fputs($fp, "AUTH LOGIN\r\n");
  25.         if ($sent) echo "-->AUTH LOGIN (".$sent.")<br>";
  26.         $in = fgets($fp, 256);
  27.         echo "<--".$in."<br>";
  28.  
  29.         $sent = fputs($fp, base64_encode('логин для авторизации')."\r\n");
  30.         if ($sent) echo "-->".base64_encode('логин')."(".$sent.")<br>";
  31.         $in = fgets($fp, 256);
  32.         echo "<--".$in."<br>";
  33.  
  34.         $sent = fputs($fp, base64_encode('пароль')."\r\n");
  35.         if ($sent) echo "-->".base64_encode('пароль')."(".$sent.")<br>";
  36.         $in = fgets($fp, 256);
  37.         echo "<--".$in."<br>";
  38.  
  39.         $sent = fputs($fp, "MAIL FROM: senderlogs@mail.ru\r\n");
  40.         if ($sent) echo "-->MAIL FROM senderlogs@mail.ru (".$sent.")<br>";
  41.         $in = fgets($fp, 256);
  42.         echo "<--".$in."<br>";
  43.  
  44.         $sent = fputs($fp, "RCPT TO: кому\r\n");
  45.         if ($sent) echo "-->RCPT TO кому (".$sent.")<br>";
  46.         $in = fgets($fp, 256);
  47.         echo "<--".$in."";
  48.  
  49.  
  50.         $sent = fputs($fp, "DATA\r\n");
  51.         if ($sent) echo "-->DATA (".$sent.")<br>";
  52.         $in = fgets($fp, 256);
  53.         echo "<--".$in."<br>";
  54.  
  55.         $sent = fputs($fp, $SEND."\r\n.\r\n"); //gпеременная $SEND сформирвана заранее
  56.         if ($sent) echo "-->тело письма (".$sent.")<br>";
  57.  
  58.         $in = fgets($fp, 256);
  59.         echo "<--".$in."<br>";
  60.  
  61.         $sent = fputs($fp, "QUIT\r\n");
  62.         if ($sent) echo "-->QUIT (".$sent.")<br>";
  63.  
  64.  


В браузер это выводит следующее

"<--220 smtp3.mail.ru ESMTP ready
-->EHLO mail(11)
<--250-smtp3.mail.ru

<--250-SIZE 31457280

<--250-8BITMIME

<--250-AUTH PLAIN LOGIN

<--250 STARTTLS

-->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()? Это помогло бы узнать сколько можно считать.
Понимаю что возможо слегка глупо пишу, но я, при написании скрипта, представляю сокет как файл в который поочерёдно пишут клиент и сервер, где клиент это скрипт.
cod Отправлено: 18 Июля, 2011 - 23:24:32 • Тема: Хранение функции в файле • Форум: Вопросы новичков

Ответов: 7
Просмотров: 415
Собираясь гуглить думал, что быстренько найду ответ на свой вопрос. Наверняка не я первый этим интересуюсь. Но как-то пусто оказалось, может не так искал.. В общем, у меня вопрос:
Можно ли описать функцию в отдельном файле и потом по мере надобности использовать её из этого файла в других php-скриптах? Думаю понятно для чего это, - чтобы уменьшить количество кода.
(Добавление)
Хех Хорошо Только создал тему, вернулся к коду и сам разобрался))
Через функцию include() всё без проблем делается. Создаёшь файл с описанием функции и потом его подключаешь, - всё можно использовать функцию.
А у меня сначала не получилось потому что я в файле не поставил тег <?php... ?>

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB