Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обращение к свойствам объекта класса из методов другого класса созданного методом первого

 PHP.SU

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


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

> Без описания
cod
Отправлено: 25 Марта, 2014 - 19:17:38
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




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

есть классы 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?

(Отредактировано автором: 25 Марта, 2014 - 19:20:36)

 
 Top
OrmaJever Модератор
Отправлено: 25 Марта, 2014 - 19:22:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
cod
Отправлено: 25 Марта, 2014 - 19:42:22
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




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.
 
 Top
caballero
Отправлено: 25 Марта, 2014 - 20:07:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
cod
Отправлено: 26 Марта, 2014 - 05:21:59
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




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.  
 
 Top
cod
Отправлено: 26 Марта, 2014 - 18:38:18
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




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

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).
Это конечно не то, что я хотел, но хотя бы сводит количество передаваемых параметров до одного.
Прошу всё же подсказки от тех, кто знает как сделать так как я хотел изначально.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB