仅传递给定方法的类

The $bar object will have access to all of foo's methods and properties.

Instead, can I give $bar only access to one of foo's methods such as letBarUse()?

<?php
class foo
{
    public $bar, $a,$b,$c;
    public function __construct()
    {
        $this->bar=new bar($this);
    }
    public function letBarUse(){
        $this->a=$this->b;
    }
    public function dontLetBarUse1(){}
    public function dontLetBarUse2(){}
}

class bar
{
    public function __construct($foo)
    {
        $this->foo=$foo;
    }
    public function hello(){
        $this->foo->letBarUse(); // Okay
        $this->foo->dontLetBarUse1(); //Not okay
    }
}

No, you cannot selectively restrict the callability of methods for specific callers. You should simply hint it through an interface:

interface SupportsBars {
    public function letBarUse();
}

class Foo implements SupportsBars { ... }

class Bar {
    public function __construct(SupportsBars $supporter) {
        $this->supporter = $supporter;
    }
}

Yes, Bar will be able to call other methods than letBarUse, but it is not type-safe for it to do so. The fact that you happen to pass in an object which happens to have other methods is irrelevant; Bar has declared that it is only interested in a specific interface and it should not attempt to call anything else which wasn't declared in the interface.

There's no real need to be any more restrictive than that, since anyone can call anything anyway. Even protected and private methods can be called if you really want to.

Yes. You have to use the 'protected' keyword on that method and 'private' on the others

There is a possiblity that allows you to do exactly that, but it is not classes. Whet you are after are traits. The official PHP documentation on traits and how you can use only parts of them.

I would assume that you are using PHP version > 5.3 (and you really should by now), since they are 5.4+ feature.