<?php // lint >= 8.0

abstract class Test {
	abstract public function __construct($x);
}

interface Test {
	public function __construct($x);
}

class Whatever
{

	/**
	 * No parameters.
	 */
	public function __construct()
	{
	}

	public function noConstructor()
	{
	}

}

class Something
{

	public function __construct($noProperty)
	{
	}

}

class Anything
{

	public function __construct(public $withPromotion, private string $withPromotionAndTypeHint, callable &$callable, ...$variadic)
	{
	}

}

class Nothing
{

	private $a = '';

	private $b;

	private $c;

	private $d;

	/** @ORM\Column(type="string") */
	private string $e;

	/** Description */
	private string $f;

	/** @var string Description */
	private $g;

	/**
	 * @var string
	 * @phpstan-var class-string
	 */
	private string $h;

	public function __construct($a, $c, $d, $e, $f, $g, $h)
	{
		$phpVersion = phpversion();

		$className = $this::class;

		$this->b = 'b';

		$this->a .= 'a';

		$this->c = $a;

		$this->d = $d + $c;

		$this->e = $e;

		$this->f = $f;

		$this->g = $g;

		$this->h = $h;
	}

}
