我有一个启动另一个类的类,我不关心对对象的引用我只需要方法并且必须传入新参数。
class A {
__set .....
}
class B extends A {
$anotherA = new A;
$anotherA->myName = 'stackoverflow';
}
简而言之,我想让B类扩展A,初始化A的新实例,但我不想每次都输入“new”,我已经看到了以下语法:
B::A // something like that
但不确定如何使用它,或者如果那样做我想做的事情?
答案 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();