2011-01-18 43 views
0

我有两个班。我们称他们为'Class_A'和'Class_B'。我想在'B类'中使用'Class_A'属性和方法。像这样...如何使用第二类中的第一类属性和方法?

$a = new Class_A; 


class Class_B { 

    function __construct() { 

     $a->foo = 2; 

     $a->magic(); 

    } 

} 

当然,这是行不通的。对付它的最佳做法是什么?

  • 'global'keyword?
  • 使'Class_A'的属性和方法是静态的吗?
  • 另一种方式......?
+0

这一切都取决于你实际想要完成的事情。每种方法都有其自身的优点和缺点。您可以使用静态成员,继承或将Class_A传递给Class_B作为参数。这取决于你需要做什么。 – Wade 2011-01-18 23:48:54

+0

我正在创建微小的MVC框架。 'Class_A'代表'view','Class_B'代表'controller'。 我使用静态成员来完成它,但似乎几乎所有其他MVC框架都使用“依赖注入”。 – daGrevis 2011-01-18 23:53:56

回答

3

Dependency injection

$a = new Class_A(); 

class Class_B { 
    function __construct($x) { 
      $x->foo = 2; 
      $x->magic(); 
    } 
} 

$b = new Class_B($a); 
0

如果您需要Class_A类的实例,然后将它传递给类Class_B的构造函数:

class Class_B { 
    function __construct($a) { 
     $a->foo = 2; 
     $a->magic(); 
    } 
} 

$a_instance = new Class_A(); 

$b = new Class_B($a_instance); 

如果类Class_A不需要为了被实例化要执行其任务,请将属性和方法定义为static,并用Class_A::method();

避免global s。如果Class_BClass_B(例如香蕉是水果),那么你可能会继承与继承。

相关问题