Redeclaring a plugin function within a class

How does wordpress know that the add_meta_box() function used inside the user-defined add_meta_box( $post_type ) function is a plugin function and not a recursive one?

It doesn’t, WordPress just calls it, so you can indeed create infinite loops.

Instead what I think you’re asking is how PHP knows to call that class method and not the function with the same name. Remember, WordPress is an application written in PHP, it’s not a programming language itself, and you’re writing PHP code that calls WordPress functions/APIs, not WordPress code.

The answer, is that the parameter expects a callable value, something PHP recognises as something it can call, e.g. the name of a function, an anonymous function, etc.

The answer becomes clearer when you compare the following:

  • 'bar' is equivalent to bar();
  • array( $this, 'bar' ), is equivalent to $this->bar();
  • array( 'Foo, 'bar' ), is equivalent to Foo::bar()
  • etc…

As you can see, the code in your question used an array, where the entry is the object, and the second entry is the name of the method to call.

It’s also helpful to refer to these by their proper names, e.g. a function inside a class is a class method, sometimes known as a class function. This is different from a normal function.

For more information on what callables are and how they work:

https://www.php.net/manual/en/language.types.callable.php

Callables are a PHP language feature, and one that WordPress relies on for specifying callbacks for actions/hooks/filters and other APIs.