用php初始化类

用php初始化类,php,oop,Php,Oop,我有一个初始化另一个类的类,我不关心对对象的引用,我只需要这个方法,并且必须传入新的参数 class A { __set ..... } class B extends A { $anotherA = new A; $anotherA->myName = 'stackoverflow'; } 简而言之,我想让类B扩展A,初始化A的新实例,但我不想每次都键入“new”,我看到了以下语法: B::A // something like that 但是不确定该

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

class A {
     __set .....
}

class B extends A {
     $anotherA = new A;
     $anotherA->myName = 'stackoverflow';
}
简而言之,我想让类B扩展A,初始化A的新实例,但我不想每次都键入“new”,我看到了以下语法:

B::A // something like that

但是不确定该如何使用它,或者这是否会像我试图做的那样?

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

class B extends A {
    public function someMethod() {
        parent::someMethodName();
    }
}
或者,您可以在类中创建静态方法:

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

A::someStaticMethod();

如果您确实需要的是新实例,则必须使用
new
操作符。这就是它的用途。

因为您在B中扩展了A,所以可以调用类A的方法:

class B extends A {
    public function someMethod() {
        parent::someMethodName();
    }
}
或者,您可以在类中创建静态方法:

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

A::someStaticMethod();

如果您确实需要的是新实例,则必须使用
new
操作符。这就是它的用途。

您可以在返回新实例的类上定义一个静态方法。这基本上是一种“快捷方式”,但在背景中却完全一样

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

   public function instanceMethod()
   {
      echo 'Hello World!';
   }
}
现在你可以这样称呼它:

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

您可以在返回新实例的类上定义一个静态方法。这基本上是一种“快捷方式”,但在背景中却完全一样

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

   public function instanceMethod()
   {
      echo 'Hello World!';
   }
}
现在你可以这样称呼它:

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

下面是一些静态函数的示例-可以在不使用“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();

下面是一些静态函数的示例-可以在不使用“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();

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


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


这是一个可行的方法,但我看不出这比使用
new
有什么好处,除非它应该是一个单例或是一个快捷方式,比如Doctrine\u Query::create()->…有时您希望静态地检索下一个实例,这是在PHP中实现这一点的唯一方法,这是一种可行的方法,但我看不出这比使用
new
有什么好处,除非它应该是一个单例或一个快捷方式,如Doctrine\u Query::create()->…有时您希望静态地检索下一个实例,这是在PHP中实现这一点的唯一方法