用PHP启动类

时间:2009-06-19 03:18:45

标签: php oop

我有一个启动另一个类的类,我不关心对对象的引用我只需要方法并且必须传入新参数。

class A {
     __set .....
}

class B extends A {
     $anotherA = new A;
     $anotherA->myName = 'stackoverflow';
}

简而言之,我想让B类扩展A,初始化A的新实例,但我不想每次都输入“new”,我已经看到了以下语法:

B::A // something like that

但不确定如何使用它,或者如果那样做我想做的事情?

4 个答案:

答案 0 :(得分:2)

您可以做的是在返回新实例的类上定义静态方法。它基本上是一个“快捷方式”,但它在后台完全相同。

class C {
   public static function instance()
   {
      return new C();
   }

   public function instanceMethod()
   {
      echo 'Hello World!';
   }
}

现在你可以这样称呼它:

C::instance()->instanceMethod();

答案 1 :(得分:1)

以下是静态函数的一些示例 - 可以在不使用“new A”或“new B”的情况下调用它们。

class A {
    static function message($msg = 'I am Alpha') {
        echo "hi there, $msg\n";
    }
}

class B {
    static function message() {
        A::message("I am Beta");
    }
}

A::message();
B::message();

答案 2 :(得分:0)

由于你在B中扩展A,你可以调用A类的方法:

class B extends A {
    public function someMethod() {
        parent::someMethodName();
    }
}

或者,您可以在类中创建静态方法:

class A {
    public static function someStaticMethod() { ... }
}

A::someStaticMethod();

如果你真的想要一个新的A 实例,你必须使用new运算符。这就是它的用途。

答案 3 :(得分:0)

我会在B的构造函数中创建A的实例,然后你可以使用它的构造函数或静态B::create()来实例化B,它只是一个快捷方式。如果您希望所有实例化都通过create()

,您可以将构造函数设为私有
class A {
    // __set .....
}

class B extends A {
     public function __construct() {
         parent::__construct();
         $anotherA = new A;
         $anotherA->myName = 'stackoverflow';
     }

     public static function create() {
         return new self();
     }
}


new B();
B::create();