-1

我目前正在从 youtube 等学习 oop,并且我开始使用它的第一个项目。我一直没有回答的问题是..

说我有两节课

class a{
  public function dosomething($var){

  }
}

class b{
}

我可以从 b 类访问 dosomething 功能吗?如果是这样,有人可以指出我正确的方向。

谢谢

4

2 回答 2

1

你有两个选择:

  1. 将类的实例传递a给类b并在其上调用方法。(建议)
  2. 将类中的方法设为a静态并将其称为a::method(). (你不应该这样做)

要解决第一种方法的问题,您的b类需要稍作修改:

class b{
    public function callMethodOfClassa(a $instanceOfa, $var) {
        $instanceOfa->dosomething($var);
    }
}

或者:

class b {
    private $property;

    public function callMethodOfClassa($var) {
       $this->property->dosomething($var);
    }

    public function __construct(a $instanceOfa) {
        $this->property = $instanceOfa;
    }
}

在第二个示例中,您在$property此处调用的字段中保留对传递实例的引用,并在b初始化实例时传递:

$instanceOfa = new a();
$instanceOfb = new b($instanceOfa);

为了更好地理解使用 php 进行面向对象编程,请阅读手册

并承诺为第二个示例演示第一个示例 演示为了更好地理解进行了名称更改)。

于 2013-10-28T15:27:46.360 回答
0

来自评论的详细解释:

  class a{
      public function dosomething(b $var){
        $var->dosomething2();
      }
      public static function dosomething3(b $var){
        $var->dosomething2();
      }
    }
    and

    class b{
      public function dosomething2(a $var){
         echo 'Hi, not doing anithing with this var!';
      }
    }


usage:
$variable1 = new a();
$variable2 = new b();
$variable1->dosomething($variable2);
a::dosomething3($variable2);          //static call, no instance
$variable2->dosomething2($variable2);
于 2013-10-28T15:37:48.037 回答