我想知道PHP中有任何方法可以从另一个类对象中调用一个类的方法。让我说清楚 这是一个班级
class A() {
public function showData(){
//here is method of class A
}
}
// here is another class
class B(){
public function getData(){
//some method in class B
}
}
//now i create two objects
$objA= new class A();
$objB=new class B();
now i want to call this
$objB->showData();<---
是可能的..通过任何方法(使用公共,继承,子父等...) 请帮帮我
答案 0 :(得分:2)
class B extends A {
// .....
}
现在你可以实例化一个B类对象,也可以从A类调用方法。
答案 1 :(得分:2)
在提出问题的方式中,@ kemp的答案很有意义。现在,您还可以:
在B中实例化
class A {
public function showData() {
// some logic here
}
}
class B {
public function getData(){
$a = new A;
$a->showData();
}
}
$b = new B;
$b->getData();
将A注入B
class A {
public function showData() {
// some logic here
}
}
class B {
public function getData(A $a){
$a->showData();
}
}
$b = new B;
$b->getData(new A);
什么是最好的取决于您想要实现的功能。
答案 2 :(得分:1)
你也可以使用魔术方法
Class A {
public function showData() {}
}
Class B {
protected $a = null;
public function __construct(A $a) {
$this->a = $a;
}
public function __call($name, $args) {
if (is_callable(array($this->a, $name))) {
return $this->a->$name();
}
throw new BadMethodCallException('Invalid Method');
}
public function getData() {}
}
这样,当你调用$ b-&gt; showData()时,将在B上调用__call('showData',array())。然后B将检查它是否可以调用$ a-&gt; showData(),如果可以,它会。
答案 3 :(得分:1)
我的两便士;
class A {
public function showData() {
// some logic here
}
}
class B {
private $a;
function __construct(){
$this->a = new A();
}
public function A(){
return $this->a;
}
public function getData(){
//whatever
}
}
$bah = new B();
$bah->A()->showData();
我认为这是OO概念下的数据隐藏/封装。