Ссылка или переменная? - PullRequest
       5

Ссылка или переменная?

1 голос
/ 15 августа 2011

Как только я передам переменную внутри функции в качестве ссылки, если я позже получу к ней доступ, это все еще ссылка или ..?

Пример:

function one(){
    $variables = array('zee', 'bee', 'kee');
    $useLater =& $variables;
    two($variables);
}

function two($reference){
    foreach($reference as $variable){
        echo 'reference or variable, that is the question...';
    }
}

В функции two(); являются ли переменные здесь ссылкой на ранее установленные переменные $ или создан новый элемент (в памяти, я думаю ...)?

Плюс, еще один, есть ли способ проверить, передается ли переменная по ссылке или нет? (вроде: is_reference();)

Ответы [ 6 ]

2 голосов
/ 15 августа 2011

Как определено выше, функция два будет использовать новую копию $refernce.

Чтобы использовать исходную переменную, вам нужно определить функцию два следующим образом:

function two(&$ref) {
  //> Do operation on $ref;
}
1 голос
/ 15 августа 2011

Переменная, отправленная two (), является новым элементом.Если вы хотите получить доступ к ссылке на переменную, используйте два (& $ variable);

В ответ на ваш второй запрос нет стандартной функции для проверки, является ли переменная ссылкой, однако ссылканиже приведено несколько указателей на проверку, является ли переменная ссылкой или нет.

PHP: проверить, является ли объект / массив ссылкой

1 голос
/ 15 августа 2011

Переменная передается только по ссылке (в текущих версиях PHP), если вы явно передаете ее по ссылке, используя &$foo.

Аналогично, при объявлении переменной новой переменной, такой как $foo = $bar, $ foo будет ссылаться на $ bar, пока значение не изменится.Тогда это новая копия.

Существует множество способов обнаружить ссылку здесь, может быть, проверить некоторые из них.(Почему вам нужно это сделать, неизвестно, но все же, оно есть).

http://www.php.net/manual/en/language.references.spot.php

1 голос
/ 15 августа 2011

переменная. смотри:

function one(){
    $variables = array('zee', 'bee', 'kee');
    $useLater =& $variables;
    two($variables);
    var_dump($variables);
}

function two($reference){
    $reference = array();
}

дает

array(3) { [0]=> string(3) "zee" [1]=> string(3) "bee" [2]=> string(3) "kee" }

поэтому изменение его в two() не меняет его в one(), поэтому оно переменное.

0 голосов
/ 15 августа 2011

Просто попробуйте сами:

<?php

$variables = array('zee', 'bee', 'kee');
one($variables);

foreach($variables as $variable2){
        echo "original: ".$variable2."<br>";
    }


function one(&$variables){

    $useLater =& $variables;
    two($variables);

    foreach($variables as $variable2){
        echo "function one: ".$variable2."<br>";
    }

}

function two(&$reference){
    foreach($reference as $variable){
        echo "function two: ".$variable."<br>";
    }
    $reference[0] = 'lee';
}

?>

Теперь пропустите знак & и посмотрите, что произойдет.Вам нужно будет каждый раз явно указывать PHP, как вы собираетесь передавать данную переменную.

0 голосов
/ 15 августа 2011

Если вы хотите, чтобы параметр для функции был ссылкой, вы также должны написать & там.

Объектами должны быть только исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...