Как заменить 'Call-time pass-by-reference' на PHP - PullRequest
0 голосов
/ 16 февраля 2012

Учитывая, что PHP уже устарел в отношении нескольких функций и функциональных возможностей, я хотел бы реорганизовать свои коды, чтобы они соответствовали php 5.3.

, теперь я должен исключить все «обход времени вызова»-ссылка' .Итак, у меня есть три вопроса:

1 - если я заменю:

$myclass->myfunc(&$myvar);

на

$myvar = $myclass->myfunc($myvar);

будет работать?

2 - что?мне делать, если у меня что-то подобное?

$myclass->myfunc(&$myVar, &$ourvar);

3 - Как насчет

$x = &new myclass();

Спасибо за ваше время, любая помощь будет очень признательна

1 Ответ

1 голос
/ 17 февраля 2012

Во-первых, вы знакомы с тем, что такое время вызова по благоговению? Обычный переход по ссылке выполняется функцией, объявляющей, что определенные аргументы передаются по ссылке, добавляя & к параметру в его объявлении.

Передача по времени вызова по ссылке означает, что функция объявлена ​​для получения этих аргументов по значению, и вы изменили ее поведение на передачу по ссылке после факта. Передача времени вызова по ссылке на самом деле никогда не должна быть необходимой. Каждая функция должна иметь определенную цель, и для ее правильного выполнения она должна либо всегда принимать аргумент по ссылке, либо всегда принимать его по значению. Плохо заставлять функцию делать что-то, для чего она не предназначена.

Отвечая на ваши вопросы о $myclass->myfunc(&$myvar); и $myclass->myfunc(&$myVar, &$ourvar); Я бы сказал, что если вам нужно перейти по ссылке на эту функцию, то она должна быть объявлена ​​как всегда передаваемая по ссылке. т.е. * +1008 *

function myfunc(&$x, &$y) { ... }

Затем, чтобы использовать его, просто позвоните без &

$myclass->myfunc($myVar, $ourvar);

$x = &new myclass(); совершенно не имеет значения. Вы ничего не передаете. Это все еще действительный синтаксис.

...