PHP Statik Sınıflar İstifleme

5 Cevap php

Bir üyesi olarak başka bir statik sınıf statik bir sınıf yapmak için bir yolu var mı?

ÖRN. Parent_Class::Child_Class::Member_function();

5 Cevap

Eğer yuvalanmış sınıfları demek, hayır. Ben onlar bir noktada tanıttı olacak ama düştü sona erdi inanıyorum.

Orada namespace desteği, ancak, sonra konum buysa.

Onlar değişkenleri saklanan olamaz böylece Hayır, sınıflar PHP birinci sınıf vatandaş değildir.

Sen tür sizin dış sınıfında fonksiyonu sayesinde bir geçiş yapabilir

class Parent_Class
{
    public static $childClass;

    public static function callChildMethod( $methodName, array $args=array() )
    {
        return call_user_func_array( array( self::$childClass, $methodName ), $args );
    }
}

class Child_Class
{
    public static function hello()
    {
        echo 'hello';
    }
}

Parent_Class::$childClass = 'Child_Class';

Parent_Class::callChildMethod( 'hello' );

PHP (statik veya başka bir şekilde) herhangi bir biçimde iç içe sınıfları desteklemez.

Hayır.

Ancak, belki de, ne istediğinizi yapmak için PHP'nin sihirli yöntemlerden birini kullanabilirsiniz:

class ParentClass {
  public static function __callStatic($method,$args) {
    return call_user_func_array(array('ChildClass',$method),$args);
  }
}

class ChildClass {
  public static function childMethod() {
    ...
  }
}

ParentClass::childMethod($arg);

Evet, PHP statik sınıflar iç içe olabilir, ama güzel değil, ve ekstra iş biraz alır. Sözdizimi var biraz daha farklı.

Hüner statik dış sınıf başlatmak ve iç sınıf statik bir örneğini oluşturmak için olduğunu.

Daha sonra iki şeyden birini, hem aşağıda gösterilmiştir yapabilirsiniz.

  1. (hiçbir miras ilişki olduğundan sınıf çocuk, aslında bir yanlış isim.) iç sınıf statik bir örneğine bakın

  2. (keşif için izin verir, çünkü bu tercih edilir.) iç sınıfının örneği için statik bir accessor yöntemini oluşturmak

class InnerClass {
    public static function Member_function() { 
        echo __METHOD__;
    }
}

class OuterClass {
    public static $innerClass;

    public static function InnerClass() {
        return self::$innerClass;
    }

    public static function init() {
        self::$innerClass = new InnerClass();
    }
}
OuterClass::init();

OuterClass::$innerClass->Member_function();
OuterClass::InnerClass()->Member_function();