你可以打电话给另一堂课吗?

时间:2013-10-28 15:24:52

标签: php oop

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

说我有两个班级

class a{
  public function dosomething($var){

  }
}

class b{
}

我可以从b级访问dosomething函数吗?如果是这样,有人会指出我正确的方向。

由于

2 个答案:

答案 0 :(得分:1)

您有两种选择:

  1. 将类a的实例传递给类b并调用方法。 (可取)
  2. 将类a中的方法设为静态,并将其称为a::method()。 (你永远不应该这样做)
  3. 要解决第一种方式的问题,您的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 the manual

    并承诺demo for the first example demo for the second sample为了更好地理解名称更改)。

答案 1 :(得分: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);