我正在将PHP5应用程序转换为PHP7,其中一个要求是删除与该类名称相同的构造函数的所有实例,而是将其命名为“__construct”。
例如:
class xyz {
public function xyz() {
需要成为
class xyz {
public function __construct() {
我认为egrep管道进入sed可能是“整体”做到这一点的最佳方式,但我不知道这样做是否足够好。
我知道我可以使用:
class\s+([A-Za-z]+)\s+\{
捕捉班级名称,但我不确定从那里开始。
非常感谢任何帮助。
:)
答案 0 :(得分:0)
如评论中所述,更好地使用脚本语言,一些逻辑和双因素方法:
__construct
<小时/> 在
PHP
:
<?php
$class_regex = '~
^\s*class\s+
(?P<class>\S+)[^{}]+(\{
(?:[^{}]*|(?2))*
\})~mx';
$data = preg_replace_callback($class_regex,
function($match) {
$function_regex = '~function\s+\K'.$match['class'].'~';
return preg_replace($function_regex, '__construct', $match[0]);
},
$data);
echo $data;
?>
在regex101.com和整个code on ideone.com上查看外部正则表达式的演示。