如何使 PHP 版本 8 支持与 class 同名的构造函数?
How to make PHP version 8 support constructor with same name as class?
我有一个旧项目正在迁移到 PHP 版本 8,但是新的 PHP 版本不支持 class 基于 class 名称命名的构造函数,在旧版本中有效。
我希望class这样的人继续工作:
class Person {
private $fname;
private $lname;
// Constructor same class name here
public function Person($fname, $lname) {
$this->fname = $fname;
$this->lname = $lname;
}
// public method to show name
public function showName() {
echo "My name is: " . $this->fname . " " . $this->lname . "<br/>";
}
}
// creating class object
$john = new Person("John", "Wick");
$john->showName();
将Person
更改为__construct
public function __construct($fname, $lname) {
$this->fname = $fname;
$this->lname = $lname;
}
目前这不是一个好的做法,在 PHP 中已弃用。如果您将来使用构造函数名称作为方法名称,您将遇到麻烦。更好的构造函数使用 as__construcotr
.
class Person {
private $fname;
private $lname;
// Constructor same class name here
public function __construct($fname, $lname) {
$this->fname = $fname;
$this->lname = $lname;
}
// public method to show name
public function showName() {
echo "My name is: " . $this->fname . " " . $this->lname . "<br/>";
}
}
// creating class object
$john = new Person("John", "Wick");
$john->showName();
这不是您可以重新打开的设置,恐怕该功能已从 PHP 中永久删除。可以编写某种模拟旧行为的扩展,但从长远来看,这将比对所有现有文件进行一次性修复要多得多 运行。
您最好的选择可能是使用 Rector which can automate the upgrade process. In this case, using the Php4ConstructorRector 规则之类的工具,它应该可以为您完成所有工作。
我有一个旧项目正在迁移到 PHP 版本 8,但是新的 PHP 版本不支持 class 基于 class 名称命名的构造函数,在旧版本中有效。
我希望class这样的人继续工作:
class Person {
private $fname;
private $lname;
// Constructor same class name here
public function Person($fname, $lname) {
$this->fname = $fname;
$this->lname = $lname;
}
// public method to show name
public function showName() {
echo "My name is: " . $this->fname . " " . $this->lname . "<br/>";
}
}
// creating class object
$john = new Person("John", "Wick");
$john->showName();
将Person
更改为__construct
public function __construct($fname, $lname) {
$this->fname = $fname;
$this->lname = $lname;
}
目前这不是一个好的做法,在 PHP 中已弃用。如果您将来使用构造函数名称作为方法名称,您将遇到麻烦。更好的构造函数使用 as__construcotr
.
class Person {
private $fname;
private $lname;
// Constructor same class name here
public function __construct($fname, $lname) {
$this->fname = $fname;
$this->lname = $lname;
}
// public method to show name
public function showName() {
echo "My name is: " . $this->fname . " " . $this->lname . "<br/>";
}
}
// creating class object
$john = new Person("John", "Wick");
$john->showName();
这不是您可以重新打开的设置,恐怕该功能已从 PHP 中永久删除。可以编写某种模拟旧行为的扩展,但从长远来看,这将比对所有现有文件进行一次性修复要多得多 运行。
您最好的选择可能是使用 Rector which can automate the upgrade process. In this case, using the Php4ConstructorRector 规则之类的工具,它应该可以为您完成所有工作。