仅传递给定方法的类

时间:2016-12-06 15:50:10

标签: php oop

$bar对象可以访问所有foo的方法和属性。

相反,我是否可以$bar只允许访问fooletBarUse()方法之一?

<?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
    }
}

3 个答案:

答案 0 :(得分:0)

有可能让你做到这一点,但它不是类。你追求的是traitThe official PHP documentation on traits以及如何只使用部分内容。

我认为您使用的是PHP版本&gt; 5.3(你现在真的应该),因为它们是5.4+特征。

答案 1 :(得分:0)

不,您无法有选择地限制特定呼叫者的方法的可调用性。您应该通过界面提示它:

interface SupportsBars {
    public function letBarUse();
}

class Foo implements SupportsBars { ... }

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

是的,Bar 能够调用除letBarUse之外的其他方法, 但是 它不是类型 - 这样做是安全的。你碰巧传入碰巧有其他方法的物体这一事实是无关紧要的; Bar声明它只对特定接口感兴趣,不应尝试调用接口中未声明的任何其他内容。

没有必要比这更具限制性,因为任何人都可以打电话。如果你真的想要,甚至可以调用protectedprivate方法。

答案 2 :(得分:-1)

是。你必须使用&#39; protected&#39;关于该方法的关键字和“私人”&#39;在其他人