наследование динамических переменных

yozeff

Guest
наследование динамических переменных

PHP:
class foo{
        function newVar(){
                $this->myVar = 'My new var';
        }
}

class foo2 extends foo{
        function viewVar(){
                echo parent::$myVar;
        }
}

$foo = new foo();
$foo2 = new foo2();

$foo2->viewVar();
Мне нужно, чтобы из класса-наследника можно было получить доступ к переменной myVar. Вообще, через класс foo планируется подключать строронние модули, а класс foo2 как раз является одним из этих модулей. Если этот алгоритм неправильный и/или можно сделать лучше, то просьба объяснить как. Единственное, можно сделать доступ через функцию:[/PHP]foo->getMod('name')[/PHP], а потом через переменную работать, но все же, как лучше/правильнее?
 

Crazy

Developer
Зачем "echo parent::$myVar;", если прекрасно работает "echo $this->myVar;" ?
 

yozeff

Guest
Вот код:
PHP:
class foo{
        function newVar(){
                $this->myVar = 'My new var';
        }
}

class foo2 extends foo{
        function viewVar(){
                echo $this->myVar;
        }
}

$foo = new foo();
$foo2 = new foo2();
$foo->newVar();
$foo2->viewVar();
Если я правильно Вас понял, то код не работает.
 

Crazy

Developer
yozeff, а с чего ты взял, что $foo->newVar(); должно повлиять на $foo2->myVar?
 

yozeff

Guest
Ты имеешь ввиду, почему я не написал
PHP:
class foo{ 
         var $myVar = 'My new var'; 
}
...
?
Потому что так как раз работает, а если объявлять через функцию, то нет.
 

SiMM

Новичок
> Потому что так как раз работает, а если объявлять через функцию, то нет.
Надо-то тебе чего? Фигню ты какую-то пишешь полную.
PHP:
$foo2 = new foo2();
$foo2->newVar();
$foo2->viewVar();
По-моему, у тебя каша в голове - почитай вначале что-нибудь по ООП, того же Гради Буча.
 

Crazy

Developer
Автор оригинала: yozeff
Ты имеешь ввиду
Я имею в виду, "почему ты считаешь, что после $foo->myVar = 'My new var' должно измениться значение $foo2->myVar?"

Потому что так как раз работает, а если объявлять через функцию, то нет.
Забудь все, что ты читал про ООП. И прочитай заново.
 

yozeff

Guest
Re: наследование динамических переменных

Я же написал:
Автор оригинала: yozeff
Если этот алгоритм неправильный и/или можно сделать лучше, то просьба объяснить как.
Надо мне, чтобы из класса потомка можно было обращаться к переменной, объявленной в классе-родителе.
to SiMM: если ты не можешь ответить на мой вопрос, то не отвечай.
to Crazy: что можно почитать, чтобы я забыл?
 

SiMM

Новичок
> to SiMM: если ты не можешь ответить на мой вопрос, то не отвечай.
Если ты не можешь нормально сформулировать вопрос - не задавай.
 

phobos

Новичок
понимаю что не так но не знаю как объяснить :D
ты хочешь в классе foo2 получить свойства объекта $foo.
в общем почитай про наследование....
 

yozeff

Guest
Вообще, вот проблема, которую я хочу решить.
Есть класс, который подключает модули(реализованы через классы), пусть будет называться mods. Некоторые модули требуют другие модули(например, модуль nested требует модуль bd). Модули находятся в отдельных файлах. Соответственно, нужно чтобы из одного класса можно было вызвать метов другого. Можно через глобальные переменные, конечно, сделать. Можно(или нет?) сделать, как я написал -- все обращения между модулями происходят через родительский класс,mods, а сами модули -- его потомки.
Если я неправильно реализовываю, или нужно поменять алгоритм, то я вполне могу принять адекватную критику, которая поможет решить эту проблему.

-~{}~ 21.08.05 17:49:

Вы напишите, что почитать, т.к. я читал только сухие описания работы, без объяснения "зачем".
 

SiMM

Новичок
Не нужно тут наследования.
Под PHP4 задачу можно выполнить так:
PHP:
class foo{
  function newVar(){
    $this->myVar = 'My new var';
  }
}

class foo2{
  function foo2(&$foo){
    $this->foo = &$foo;
  }
  function viewVar(){
    echo $this->foo->myVar;
  }
}
$foo = new foo();
$foo2 = new foo2($foo);
$foo->newVar();
$foo2->viewVar();
Под PHP5 - почти то же самое.
 

SiMM

Новичок
> Вы напишите, что почитать, т.к. я читал только сухие описания работы, без объяснения "зачем".
Сказал же я тебе. Читай Гради Буча.
 

WMix

герр M:)ller
Партнер клуба
PHP:
<?php

class foo{
        function newVar(){
                $this->myVar = 'My new var';
        }
}

class foo2 extends foo{
        function viewVar(){
                parent::newVar(); 
                echo $this->myVar;
        }
}

//$foo = new foo();
$foo2 = new foo2();

$foo2->viewVar();
-~{}~ 21.08.05 19:21:

Если что это СТАТИЧЕСКИЙ вызов
 

yozeff

Guest
Объявить переменную через функцию через функцию СТАТИЧЕСКОЙ нельзя?
 

WMix

герр M:)ller
Партнер клуба
PHP:
<?php
class Db{

	function &getDb(){
		static $db;
		if( !isset( $db ) ){
			$db = new Db();
		}
		return $db;
	}
...
}

$db = DB::getDb(); // Это??
 
Сверху