At first this was a feature I was excited for. After using it, I've changed my mind about it. Constructor property promotion was added so that you could pass an argument to a class constructor, and it would get auto assigned to a property, without you having to do $this->That = $That in your constructors over and over.

What It Tried To Fix

class AwsBucket {

	protected
	String $PubKey;

	protected
	String $PrivKey;

	protected
	String $Region;

	protected
	String $Bucket;

	protected
	String $ACL;
	
	public function
	__Construct(String $PubKey, String $PrivKey, String $Region, String $Bucket, String $ACL) {

		$this->PubKey = $PubKey;
		$this->PrivKey = $PrivKey;
		$this->Region = $Region;
		$this->Bucket = $Bucket;
		$this->ACL = $ACL;
		
		// ...

		return;
	}
	
}

Why The Fix Is Worse

Reason 1: This is unwieldy.

class AwsBucket {

	public function
	__Construct(public String $PubKey, public String $PrivKey, public String $Region, public String $Bucket, public String $ACL) {
		// ...
		return;
	}
	
}

Reason 2: This is terrifying.

class AwsBucket {

	public function
	__Construct(
		public String $PubKey,
		public String $PrivKey,
		public String $Region,
		public String $Bucket,
		public String $ACL
	) {
		// ...
		return;
	}
	
}

Reason 3: You've lost your Context Index.

Before you could open a file (and if it wasn't written by someone who hates you) you could quickly scan it to grok all the properties that exist and their access as they would be pre-declared. With Property Promotion, you are not allowed to pre-declare it anymore if it is also to be promoted. The only way to know what properties exist are to scan for declared properties AND THEN ALSO digest the clusterfuck the constructor argument list has likely become.

My Suggested Fix

Properties should have been declared as promoted in their declaration, not in the argument list of the constructor. Then, if an argument name matched one from the constructor it would have been auto assigned. Since PHP 8 also has named argument support it is aware of argument names at a time that this would need to be done.
class AwsBucket {

	protected promoted
	String $PubKey;

	protected promoted
	String $PrivKey;

	protected promoted
	String $Region;

	protected promoted
	String $Bucket;

	protected promoted
	String $ACL;
	
	public function
	__Construct(String $PubKey, String $PrivKey, String $Region, String $Bucket, String $ACL) {
		// ...
		return;
	}
}

Final Thoughts

Having two different means to declare a class property is bad. Yeah I am sure in a month or so when PHP 8 support finally hits IDEs properly, your editor will be fine. But editors are not programmers, and this loss of context is a disaster for code clarity. In its current state, I don't think I'll be using constructor property promotion at all.