::class gives you the class name without a string literal

A fully qualified class name written as a string is invisible to everything around it: an IDE will not rename it, a search for the class does not find it, and a typo surfaces at runtime as a missing class rather than at the line that got it wrong. PHP 5.5 lets the compiler produce the string instead.

namespace AppImport;

use AppCatalogueProduct;
use AppCatalogueProductRepository;
use AppCatalogueMysqlProductRepository;

// resolved from the use statement, at compile time
echo Product::class;      // AppCatalogueProduct

$container->bind(ProductRepository::class, MysqlProductRepository::class);

It resolves against the use statements in the file at compile time, which has two consequences worth holding on to: it costs nothing at runtime, and it never triggers the autoloader, so a wrong use line still yields a plausible-looking string rather than an error. What it replaces is the literal in every container binding, event map, factory table and assertInstanceOf() call — precisely the places a namespace refactor used to break without telling anyone. It does not work on a variable: $product::class is a parse error and get_class($product) is still the answer. Being 5.5-only, a library that still supports 5.3 keeps the literals for a while yet.