The non-normative HTML 5 spec declares those words, ostensibly because <p> elements cannot contain other block-level elements, and so the user agent should infer a </p> tag when a block level open tag is seen within a <p> element.
I've always been of the school of thought that it's a bad practice to depend on non-obvious behaviors that, when taken in the context of so many other rules that are explicitly defined, seem like a bug that's been codified into a de-facto rule.
Granted, <p> elements are special snowflakes in the specification (not seen as precisely a block element — because it's more limited in allowed content, a phrasing element, an inline element, etc.), but most online docs refer to it as a block level element, and in block level elements, you don't omit the closing tag.
Say what you will about XHTML (such things, I'll add, I'd likely join you in saying) but at least it had one thing going for it: a well-formed document was easy to test for. Note, I didn't say valid, I said well-formed. For that reason, I still write HTML as well-formed XML for easy linting, and then a tidy step later to turn it into plain-vanilla HTML (though, generally speaking, that last step isn't necessary).
It's a real shame HTML5 ever became a thing. We would have been a hell of a lot better off with a simpler spec - perhaps not xhtml as is, but certainly one that keeps the simplicity of well-formedness around.
Such a mess nowadays - and it's not just `<p>`, similar special snowflake rules exist for `<a>` and `<button>` too, and indeed lots of elements have special quirks that make composability a pain.
I've always been of the school of thought that it's a bad practice to depend on non-obvious behaviors that, when taken in the context of so many other rules that are explicitly defined, seem like a bug that's been codified into a de-facto rule.
Granted, <p> elements are special snowflakes in the specification (not seen as precisely a block element — because it's more limited in allowed content, a phrasing element, an inline element, etc.), but most online docs refer to it as a block level element, and in block level elements, you don't omit the closing tag.
Say what you will about XHTML (such things, I'll add, I'd likely join you in saying) but at least it had one thing going for it: a well-formed document was easy to test for. Note, I didn't say valid, I said well-formed. For that reason, I still write HTML as well-formed XML for easy linting, and then a tidy step later to turn it into plain-vanilla HTML (though, generally speaking, that last step isn't necessary).