1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-15 10:57:08 +01:00
psalm/docs/running_psalm/issues/UnsafeInstantiation.md

81 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# UnsafeInstantiation
Emitted when an attempt is made to instantiate a class using `new static` or similar without a constructor that's final:
```php
<?php
class A {
public function getInstance() : self
{
return new static();
}
}
```
## Whats wrong here?
The problem comes when extending the class:
```php
<?php
class A {
public function getInstance() : self
{
return new static();
}
}
class AChild extends A {
public function __construct(string $some_required_param) {}
}
AChild::getInstance(); // fatal error
```
## How to fix
You have two options you can make the constructor final:
```php
<?php
class A {
final public function __construct() {}
public function getInstance() : self
{
return new static();
}
}
```
Or you can add a `@psalm-consistent-constructor` annotation which ensures that any constructor in a child class has the same signature as the parent constructor:
```php
<?php
/**
* @psalm-consistent-constructor
*/
class A {
public function getInstance() : self
{
return new static();
}
}
class AChild extends A {
public function __construct() {
// this is fine
}
}
class BadAChild extends A {
public function __construct(string $s) {
// this is reported as a violation
}
}
```