dany
dany

Reputation: 53

Is there a way to bind variables? PHP 5

Using PHP 5 I would like to know if it is possible for a variable to dynamically reference the value of multiple variables?

For example

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

Now if I change either $var or $var2 I would like $var3 to be updated too.

    $var2 =" world";  
    echo $var3; 

This still prints hello earth, but I would like to print "hello world" now :(

Is there any way to achieve this?

Upvotes: 4

Views: 3409

Answers (6)

Eugene
Eugene

Reputation: 3375

From my point of view the following code is a little closer to the required:

$a = 'a';
$b = 'b';
$c = function() use (&$a, &$b) { return $a.$b; };
echo $c(); // ab
$b = 'c';
echo $c(); // ac

Upvotes: 0

adseipsum
adseipsum

Reputation: 43

it's a bit late, but it's interesting question. You could do it this way:

$var = "hello";
$var2 = " earth";
$var3 = &$var;
$var4 = &$var2;
echo $var3.$var4; // hello earth

Upvotes: 1

selfawaresoup
selfawaresoup

Reputation: 15832

This should do the trick. I tested it on PHP 5.3 and it worked. Should also work on any 5.2.x version.

You could easily extend this with an "add"-Method to allow an arbitrary number of strings to be placed in the object.

<?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'

Upvotes: 3

Gordon
Gordon

Reputation: 317147

No. Cannot be done without utilizing some sort of custom String class. Check the PHP manual for types and variables, especially this passage:

By default, variables are always assigned by value. That is to say, when you assign an expression to a variable, the entire value of the original expression is copied into the destination variable. This means, for instance, that after assigning one variable's value to another, changing one of those variables will have no effect on the other. For more information on this kind of assignment, see the chapter on Expressions.

Upvotes: 2

superUntitled
superUntitled

Reputation: 22547

Create a function.

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

echo foobar("hello", "earth");
echo foobar("goodbye", "jupiter");

Upvotes: -1

Amber
Amber

Reputation: 527183

No, there is no way to do this in PHP with simple variables. If you wanted to do something like this in PHP, what you'd probably do would be to create a class with member variables for var1 and var2, and then have a method that would give you a calculated value for var3.

Upvotes: 3

Related Questions