вызов неописанного еще метода

_vampiro_

Новичок
вызов неописанного еще метода

PHP:
 class inside{
   function set_parent_param($val){
     $main_obj->setparam($val);   //--  <-- ТУТ НЕ ПАШЕТ
   }
     
 }
 
 class a {
   var $some_param;
   var $obj;
   
   function setparam($val){
     $this->some_param = $val;
   }
   
   function run(){
     $this->obj = new inside;
     $this->obj->set_parent_param('val2');
   }
   
 }
 
 $main_obj = new a;
 $main_obj->run();
Я думаю по коду ясно, что мне хочется сделать...
есть объект. внутри него другой. как из внутреннего вызвать метод основного? Не могу найти в мане... (
 

_vampiro_

Новичок
Loshadka
Э....
Class MySite extends Smarty, MySql, MyFTP, MailExt ..... :D

Прикольно будет смотреться....

-~{}~ 02.02.06 10:59:

Курю ман пока-что... Где наши волкодавы форума? :)))
 

Profic

just Profic (PHP5 BetaTeam)
Вариант 1:
PHP:
class a { 
   var $some_param; 
   var $obj; 
    
   function setparam($val) { 
     $this->some_param = $val; 
   } 
    
   function run() { 
     $this->obj = new inside; 
     $this->setparam('val2'); 
   } 
} 
  
$main_obj = new a; 
$main_obj->run();
Вариант 2:
PHP:
class inside {
   var $outside;

   function inside($outside) {
      $this->outside = $outside;
   }

   function set_parent_param($val) { 
     $this->outside->setparam($val);
   } 
      
} 
  
class a { 
   var $some_param; 
   var $obj; 
    
   function setparam($val) { 
     $this->some_param = $val; 
   } 
    
   function run() { 
     $this->obj = new inside($this); 
     $this->obj->set_parent_param('val2'); 
   } 
} 
  
$main_obj = new a();
$main_obj->run();
 

_vampiro_

Новичок
Варианта 1 я не понял.... как-то там без объекта сделано...

Вариант 2 не работает: переменная присваивается объекту
inside->outside->some_param...
а
PHP:
main_obj->some_param == null;
:(

4.3.3 Может дело в этом?
 

Profic

just Profic (PHP5 BetaTeam)
Это был пример. Для того, чтобы это заработало в php4, нужно конструктор inside-а переделать на работу со ссылками (в двух местах поставить &amp;).
Ну а первый вариант - это вообще не использовать дополнительный класс. Очень хорошо подходит к данному конкретному примеру :).
 

_vampiro_

Новичок
у меня модули - объекты... наследуют там друг-друга... вызывают методы объекта-сайта. :)

Бедем работать в сторону &
 

Superman

Новичок
Если inside более нигде не юзает класс a, то лучше этот вариант
PHP:
class inside {
   function set_parent_param(&$parent, $val) { 
     $parent->setparam($val);
   } 
      
} 
  
class a { 
   var $some_param; 
   var $obj; 
    
   function setparam($val) { 
     $this->some_param = $val; 
   } 
    
   function run() { 
     $this->obj = new inside; 
     $this->obj->set_parent_param($this, 'val2'); 
   } 
} 
  
$main_obj = new a();
$main_obj->run();
 

_vampiro_

Новичок
PHP:
class inside { 
   var $outside; 

   function inside(&$out) {  //--<-----&$ Отвалится в пятом, как я понимаю.
      $this->outside = $out; 
   } 

   function set_parent_param() {  
     $this->outside->setparam('value2'); 
   }  
       
}  
   
class a {  
   var $some_param;  
   var $obj;  
     
   function setparam($val) {  
     $this->some_param = $val;  
   } 
     
   function run() {  
     $this->obj = new inside($this);  
     $this->obj->set_parent_param();  
   }  
}  
   
$main_obj = new a(); 
$main_obj->run();
var_export($main_obj);
Рисует:
PHP:
Content-type: text/html
X-Powered-By: PHP/4.3.10

class a {
  var $some_param = NULL;
  var $obj = 
  class inside {
    var $outside = 
    class a {
      var $some_param = 'value2';
      var $obj = NULL;
    };
  };
}
не вариант.... (
 
Сверху