接口不能声明私有/受保护的功能

I read many articles, "Interface is a contract of the class". A class having private,protected and public visibility then why interface declare only public methods.

Interface describes how to interact with object (public methods).
Interface must know nothing about internal object structure (private or protected methods)
and interface don't care what going on under the hood of object.

Also private and protected methods may be vary depending on low layer implementation.

For example we have interface SocialMedia

interface SocialMedia
{
    public function share();
}

And inside this interface we don't care (and don't have to care) about how exactly object will share information, we only know that information will be shared.

And also we have 2 classes:

class Twitter implements SocialMedia
{
    private function tweet()
    {
    }

    public function share()
    {
        return $this->tweet();
    }
}

class Facebook implements SocialMedia
{
    private function post()
    {
    }

    public function share()
    {
        return $this->post();
    }
}

As you can see this classes implements SocialMedia and we know how to interact with them - exactly this is intention of interface.
Also we have private methods tweet for class Twitter and post for Facebook this methods are low layer implementation inside particular class, so we can not describe such methods inside interface.

Public - Available anywhere (Other classes, Instances of object);

Protected - Available only in classes that extend the current class;

Private - Available only in the current class;

Reference

Interface is supposed to mean "what you can see from outside the class". It would not make sense to add non-public methods.