2009-06-19 65 views
0

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

class A { 
    __set ..... 
} 

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

我想有B类扩展,初始化A的新实例,但我不希望有键入“新”每次,我见过的语法如下:

B::A // something like that 

但不知道如何使用它,或者如果这会做我想做的事情?

回答

0

我会在B的构造函数创建一个实例,那么您可以使用它的构造函数或静态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(); 
0

既然你是B中延伸的,你可以调用类A的方法:

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

或者,您可以在类中创建一个静态方法:如果你真的

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

A::someStaticMethod(); 

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

2

你可以做的是在返回新实例的类上定义一个静态方法。它基本上是一个'快捷方式',但它在背景中完全一样。

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

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

现在你可以这样调用它:

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

这是一个可行的办法,但我看不出这是比任何使用`new`,除非它应该是一个单身或如Doctrine_Query快捷方式::创建()更好 - > ... – 2009-06-19 03:40:32

1

下面是静态函数举一些例子 - 他们可以在不使用“新A”或“新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();