$bar
对象可以访问所有foo
的方法和属性。
相反,我是否可以$bar
只允许访问foo
等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
}
}
答案 0 :(得分:0)
有可能让你做到这一点,但它不是类。你追求的是trait
。 The 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
声明它只对特定接口感兴趣,不应尝试调用接口中未声明的任何其他内容。
没有必要比这更具限制性,因为任何人都可以打电话。如果你真的想要,甚至可以调用protected
和private
方法。
答案 2 :(得分:-1)
是。你必须使用&#39; protected&#39;关于该方法的关键字和“私人”&#39;在其他人