PHP Call-Time переход по ссылке заменить на регулярное выражение

Я портирую офисную систему управления с php 5.3 на 5.4, и ошибка состоит в том, что многие функции реализуют передачу по ссылке («&»символ в аргументах), и это останавливает время выполнения приложения. Я решил следующим образом:

//This is a function with pass by reference:
function myfunc(&$x, $y, &$z) { ... }

//This is the above function being implemented:
$myClass->myfunc(&$var1, $var2, &$var3);

Документация php говорит мне, что я должен удалить «&«когда я реализую функцию, поэтому я должен заменить эту строку для:

$myClass->myfunc($var1, $var2, $var3);

потому что определение функции уже имеет символ, означающий, что аргумент приходит по ссылке.

Но у меня так много php-файлов, более 800 файлов, и мне пришлось бы заменить один за другим, построчно.

Так что мне просто нужно регулярное выражение, которое поможет мне найти все это «&$ «совпадения (избегая && что означает И, и любой из «&$ «совпадений в объявлении функции).

Я построил это регулярное выражение: [^&]&\ $ и это работает, но нужно исключить любое совпадение, начинающее строку в «функции» (это будет объявление функции).

2

Решение

^(\s*function.*)$|(?<!&)&(?=\$[^(]*\))

Попробуйте это. Это должно работать для вас. $1,

Смотрите демо.

https://regex101.com/r/sH8aR8/35

Ваше регулярное выражение [^&]&\$ не использует 0 утверждений ширины. Он заменит 3 символа. Так что лучше использовать lookaheads и lookbehnids.

$re = "/^(\\s*function.*)$|(?<!&)&(?=\\$[^(]*\\))/im";
$str = "&\$)\n&&\$\n\$myClass->myfunc(&\$var1, \$var2, &\$var3);\nfunction myfunc(&\$x, \$y, &\$z) { ... }\n\n";
$subst = "$1";

$result = preg_replace($re, $subst, $str);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]