адрес переменной

golibroda

Guest
адрес переменной

Уважаемые Господа!
возник тут у меня вопрос:
КАК получить адрес (ссылку) переменной?
- для того, что бы можно было передать значения в функцию по ссылке, как я прочитал в доках используется форма:
&$Value...
но, почему -то ЭТО НЕ работает...
(то ли я чего - то не понимаю, то ли одно из двух)

обьясните, пожжж....

с уважением,
Александр.
 

Фанат

oncle terrible
Команда форума
неправильно ты прочитал в доках.
&$Value используется не при передаче переменной, а при объявлении функции.

а какой тебе адрес нужен-то? в функции просто обращаешься к $value и всё
 

agx

Программер :-)
Функцию объявляешь так:
function test(&$param)
{
$param='Hello World';
}
Предеаешь так:
$str='Test';
test($str);
echo $str;
Выведет: Hello World
 

golibroda

Guest
должен повинится, я немного не правильно задал вопрос "амперсент доллар" отлично работают, для "просто функций"... как только переходишь на классы, вот тут - проблем у меняч и возник....

если у меня есть некий параметр класса...
и я ХОЧУ, что бы в ЭТОМ параметре у меня хранился адрес некой величины, "внешней" по отношению к моему классу...
и, соответственно, если у меня меняется тот, "внешний" параметр, мне НУЖНО, что бы менялся и "внутренний" параметр класса... а вот это, к сожалению и НЕ происходит...
вот ТУТ что делать??
:-((

с уважением, и надеждой...
Александр.
 

agx

Программер :-)
Боюсь ошибиться, но, помоему, такое невозможно. Но что тебе мешает при утановке внешней переменной вызывать что-нибудь типа obj->SetVar($val);?
 

yugene

Отошел от дел
Я натыкался на те же грабли. Попробуй так:

PHP:
function class_name(& $_DB)
{
        $this->DB = & $_DB;
}
 

golibroda

Guest
привет всем!

yugene, спасибо, но, НЕ проходит... хотя, вот, вчера, как только написал, так и пришла мыслишка, попробовал - и получилось! :))


вот, привожу просто код:

class ttt {
var $LT;

function ttt ( &$ll)
{
$this->LT = $ll;
}

function go ()
{
$this->LT = $this->LT + 100;
}

}


function data (&$dta )
{
$dta = $dta +10;
}

$NewPropertyData = 5;
$TestLocStaticData = 88;

echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';

data (&$NewPropertyData );

echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';

$qqq = 500;

$test = new ttt ( $qqq );
$test1 = new ttt ( $TestLocStaticData );

$NewPropertyData = &$test->LT;

$test->go();
echo 'After go... <br>';
echo ' Test_991 -->$test->LT ' . $test->LT . ' <-- <br>';
echo ' Test_991 -->$test1->LT ' . $test1->LT . ' <-- <br>';
echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';

data (&$TestLocStaticData);
echo ' Test_991 -->$test1->LT ' . $test1->LT . ' <-- <br>';
echo ' Test_991 --> TestLocStaticData' . $TestLocStaticData . ' <-- <br>';
$test1->go();
echo ' Test_991 -->$test1->LT ' . $test1->LT . ' <-- <br>';
echo ' Test_991 --> TestLocStaticData' . $TestLocStaticData . ' <-- <br>';

$test1->LT = &$TestLocStaticData;
echo ' Test_991 $test1->LT = &$TestLocStaticData;<br>';
$test1->go();
echo ' Test_991 $test1->go();-->$test1->LT ' . $test1->LT . ' <-- <br>';
echo ' Test_991 $test1->go();--> TestLocStaticData' . $TestLocStaticData . ' <-- <br>';

data (&$TestLocStaticData);

echo ' Test_991 data (&$TestLocStaticData);-->$test1->LT ' . $test1->LT . ' <-- <br>';
echo ' Test_991 data (&$TestLocStaticData);--> TestLocStaticData' . $TestLocStaticData . ' <-- <br>';

$TestLocStaticData = 876;
echo ' Test_991 $TestLocStaticData = 876;<br>';

echo ' Test_991 data (&$TestLocStaticData);-->$test1->LT ' . $test1->LT . ' <-- <br>';
echo ' Test_991 data (&$TestLocStaticData);--> TestLocStaticData' . $TestLocStaticData . ' <-- <br>';

$NewPropertyData = 300;
echo 'New Value... <br>';
echo ' Test_991 -->$test->LT ' . $test->LT . ' <-- <br>';
echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';

$test->go();
echo 'After go... <br>';
echo ' Test_991 -->$test->LT ' . $test->LT . ' <-- <br>';
echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';

data (&$NewPropertyData );
echo 'After data... <br>';
echo ' Test_991 -->$test->LT ' . $test->LT . ' <-- <br>';
echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';

$test->go();
echo 'After go... <br>';
echo ' Test_991 -->$test->LT ' . $test->LT . ' <-- <br>';
echo ' Test_991 --> NewPropertyData' . $NewPropertyData . ' <-- <br>';


====================

самое важное, пожалуй вот это:

$NewPropertyData = &$test->LT;
- или, в "обратную сторону - ПОСЛЕ конструктора класса, надо присвоить нужным членам класса нужные адреса... и все будет работать! :))

СПАСИБО ВСЕМ!!! %-))

Александр.
 
Сверху