1

我目前面临一个问题,我正在编写代码,我需要在另一个类中使用一个类。目前,我以这种方式解决问题:

   class foo {
        private $bar;
        function __construct() {
            $this->bar = new different_class();
        }
    }

但是,当我需要使用超过 1 个类时,代码会变得有点冗长和混乱。还有其他方法可以做到这一点吗?

我的想法是制作某种可以直接调用的全局类:

class foo{
        function hello(){
            return "Hello";
        }
    }
class bar{
        function hi(){
            return $foo->hello();
        }
    }

那可能吗?非常感谢你!

4

4 回答 4

1

静态方法或继承如何?

静态方法

class foo {
   public static function hello() {
      return 'Hello';
   }
} 

class bar {
   public function hi() {
     return foo::hello();
   }
 }

遗产

class foo {
    public function hello() {
       return 'Hello';
    } 
}

class bar extends foo {
   public function hi() {
     return $this->hello(); // Will return foo->hello()
   }
}
于 2013-01-28T21:39:15.147 回答
1

正如其他人所提到的,您有三个选择:

  • 使用static不需要实例化类的方法。
  • 使第二个班级成为第一个班级的子班级。
  • 在第一类中实例化第二类。(这就是您在上面的第一个示例中所做的。)

使用您给出的确切示例,一种static方法将起作用。然而,一个static方法有真正的限制——它只能用于返回常量或其他static属性。

因此,根据所涉及的实际类的复杂性,static在许多情况下它很可能不是一个可行的选择。

如果是这种情况,那么完全按照您在上面第一个示例中所做的操作是正确的选择。

于 2013-01-28T21:54:31.987 回答
0

查找静态关键字。

http://www.php.net/manual/en/language.oop5.static.php

您可能不需要整个静态类,但这取决于您的设计计划。

于 2013-01-28T21:38:39.063 回答
-1

为什么不在参数中传递一个实例?

 class Foo {
    public function hello(){
       return "Hello";
    }
 } 
 class Bar{
    function hi( Foo $foo ){
       return $foo->hello();
     }
 }

或者恕我直言,甚至更好:不要对类进行硬编码,而是使用依赖注入。你传入参数一个接口。所有实现此接口的类都可以作为参数传递。

 interface MyInterface {
    public function hello();
 }

 class Foo implements MyInterface {
    function hello(){
       return "Hello";
    }
 } 

 class Bar{
    function hi( MyInterface $foo ){
       return $foo->hello();
     }
 }

要使用界面回答您的问题:

   class foo {
        private $bar;
        function __construct( AnInterface $different_class ) {
            $this->bar = different_class;
        }
    }
于 2013-03-04T00:37:26.473 回答