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
Форумы портала PHP.SU :: Версия для печати :: Обращение к свойствам объекта класса из методов другого класса созданного методом первого
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Обращение к свойствам объекта класса из методов другого класса созданного методом первого

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

1. cod - 25 Марта, 2014 - 19:17:38 - перейти к сообщению
В общем, название темы может показаться весьма путанным; поясню.

есть классы 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?
2. OrmaJever - 25 Марта, 2014 - 19:22:12 - перейти к сообщению
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. cod - 25 Марта, 2014 - 19:42:22 - перейти к сообщению
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.
4. caballero - 25 Марта, 2014 - 20:07:49 - перейти к сообщению
добавить в app статический метод который возвращает ссылку на екземпляр app (который по логике должен быть один на все приложение)
5. cod - 26 Марта, 2014 - 05:21:59 - перейти к сообщению
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.  
6. cod - 26 Марта, 2014 - 18:38:18 - перейти к сообщению
Придумал вот такой способ:

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).
Это конечно не то, что я хотел, но хотя бы сводит количество передаваемых параметров до одного.
Прошу всё же подсказки от тех, кто знает как сделать так как я хотел изначально.

 

Powered by ExBB FM 1.0 RC1