It does. Suppose that package A has a method called foo() and package B has a protected method called foo(). Suppose further that $b is an object of class B. Then in package A if we call $b->foo(), the call will succeed because in B we check to see if A->can("foo") and find that it can. Even though the two foos have nothing to do with each other.