What is the difference between php and php7.2 packages?

Shall I install both of them and both of its modules?

apt-cache depends php
php
  Depends: php7.2

And there is two packages for php cli:

apt-cache policy php7.2-cli 
php7.2-cli:
  Installed: (none)
  Candidate: 7.2.7-0ubuntu0.18.04.2
  Version table:
     7.2.7-0ubuntu0.18.04.2 500
        500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
     7.2.3-1ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages

The next one:

apt-cache policy php-cli 
php-cli:
  Installed: (none)
  Candidate: 1:7.2+60ubuntu1
  Version table:
     1:7.2+60ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu bionic/main i386 Packages

php is a meta package. It does not contain any software, but just links to the "correct" package via its dependency/ies.

From apt show php:

This package is a dependency package, which depends on Debian's default PHP version (currently 7.0).

(7.0, because I'm using 16.04)

So it is up to you whether to install php or php7.2. But note: with the next release upgrade, php might get upgraded to the next version, while with php7.2, the version is fixed which might lead to some issues after upgrading.

For the normal user® it is recommended to install the meta-package.


There are also meta-packages depending on multiple other packages, so you can install a whole software bundle with just one meta-package, e.g. unity-desktop.

From help.ubuntu.com:

One of the handy features of apt (the packaging system used by Ubuntu) is the use of metapackages. These packages do not contain actual software, they simply depend on other packages to be installed. This setup allows entire sets of software to be installed by selecting only the appropriate metapackage


Links:

  • Ubuntu Help: MetaPackages
  • Related Question: What is the difference between a meta-package and a package?

The php-* packages are metapackages which depend on the corresponding php7.2-* packages, the latter providing the actual PHP software.

The purpose of those metapackages is to make upgrades smoother: when you upgrade to a newer Ubuntu release which provides, say, PHP 7.3, the php-* packages will be upgraded to the newer versions, which of course will depend on the new php7.3-* packages. Thus the new php7.3-* packages will be automatically installed, and the old php7.2-* ones will be marked as no longer used (and to be removed with apt autoremove).

If you install only the php7.2-* packages, they will work fine for now, but later you would need to install the packages for newer PHP versions manually, so yes, it is recommended to install the php-* ones.