How to Fix 'Use of "parent" in callables is deprecated' PHP Error?

Why Does This Happen?

Starting with PHP 8.2, the use of "parent" in callables is deprecated, which means the following are no longer supported:

'parent::method'
['parent', 'method']

If you're using either of these in your PHP code, it will throw the following error:

Deprecated: Use of "parent" in callables is deprecated

How to Fix the Issue?

Fixing this issue is very straightforward, you can simply replace "parent" with parent::class. This means, you would use the following:

parent::class . '::method' // instead of 'parent::method'
[parent::class, 'method'] // instead of ['parent', 'method']

For example, the following code will result in the deprecation notice:

class BasicCalculator
{
	public function addOne(int $num): int
  {
    return $num + 1;
  }
}

class AdvancedCalculator extends BasicCalculator
{
  public function addOneToAll(array $nums): array
  {
    // Deprecated: Use of "parent" in callables is deprecated
    return array_map(['parent', 'addOne'], $nums);
  }
}

$calc = new AdvancedCalculator();
var_dump($calc->addOneToAll([1, 2, 3, 4]));

You can fix this, for example, in the following way:

class BasicCalculator
{
	public function addOne(int $num): int
  {
    return $num + 1;
  }
}

class AdvancedCalculator extends BasicCalculator
{
  public function addOneToAll(array $nums): array
  {
    return array_map([parent::class, 'addOne'], $nums);
  }
}

$calc = new AdvancedCalculator();
var_dump($calc->addOneToAll([1, 2, 3, 4])); // [2, 3, 4, 5]

This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.