Есть ли способ связать переменные? PHP 5 - PullRequest
3 голосов
/ 20 декабря 2009

Использование PHP 5 Я хотел бы знать, возможно ли для переменной динамически ссылаться на значение нескольких переменных?

Например

    <?php
    $var = "hello";
    $var2 = " earth";
    $var3 = $var.$var2 ;
    echo $var3; // hello earth

Теперь, если я изменю либо $var, либо $var2, я бы тоже хотел обновить $var3.

    $var2 =" world";  
    echo $var3; 

Это все еще печатает привет земля, но я хотел бы напечатать "привет мир" сейчас: (

Есть ли способ достичь этого?

Ответы [ 6 ]

3 голосов
/ 20 декабря 2009

Это должно сработать. Я тестировал его на PHP 5.3, и он работал. Должно также работать на любой версии 5.2.x.

Вы можете легко расширить это с помощью метода «add», чтобы разрешить произвольному количеству строк помещаться в объект.

<?php
class MagicString {
    private $references = array();
    public function __construct(&$var1, &$var2)
    {
        $this->references[] = &$var1;
        $this->references[] = &$var2;
    }

    public function __toString()
    {
        $str = '';
        foreach ($this->references as $ref) {
            $str .= $ref;
        }
        return $str;
    }
}
$var1 = 'Hello ';
$var2 = 'Earth';

$magic = new MagicString($var1, $var2);
echo "$magic\n"; //puts out 'Hello Earth'
$var2 = 'World';
echo "$magic\n"; //puts out 'Hello World'
3 голосов
/ 20 декабря 2009

Нет, в PHP нет способа сделать это с помощью простых переменных. Если вы хотите сделать что-то подобное в PHP, то, вероятно, вам следует создать класс с переменными-членами для var1 и var2, а затем создать метод, который даст вам вычисленное значение для var3.

2 голосов
/ 20 декабря 2009

Нет. Не может быть сделано без использования какого-либо пользовательского класса String. Обратитесь к руководству по PHP для типов и переменных , особенно этот отрывок:

По умолчанию переменные всегда присваивается по значению. То есть когда вы назначаете выражение для переменная, все значение Исходное выражение копируется в переменная назначения. Это означает, что для экземпляр, который после назначения одного значение переменной в другую, меняется одна из этих переменных не будет иметь эффект на другой. Для большего информация об этом виде назначение см. главу Выражение .

1 голос
/ 02 июля 2012

уже немного поздно, но это интересный вопрос. Вы могли бы сделать это так:

$var = "hello";
$var2 = " earth";
$var3 = &$var;
$var4 = &$var2;
echo $var3.$var4; // hello earth
0 голосов
/ 02 июля 2012

С моей точки зрения следующий код немного ближе к необходимому:

$a = 'a';
$b = 'b';
$c = function() use (&$a, &$b) { return $a.$b; };
echo $c(); // ab
$b = 'c';
echo $c(); // ac
0 голосов
/ 20 декабря 2009

Создать функцию.

function foobar($1, $2){
$3 = "$1 $2";
return $3;
}

echo foobar("hello", "earth");
echo foobar("goodbye", "jupiter");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...