Konstruktor statyczny

0

Potrzebuję w PHP zrobić coś podobnego jak napisałem poniżej prosto i przejrzyście w C#

Czyli, chciałbym wywołać metodę bez powoływania obiektu do życia, ale jednocześnie ma się wywołać pierwsze konstruktor, który zainicjuje jakieś domyślne parametry.


class Statycznie
    {
        public static int jakasZmienna;

        static Statycznie()
        {
            Statycznie.jakasZmienna = 20;
        }

        public static int Zwroc()
        {
            return jakasZmienna;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Statycznie.Zwroc());
            Console.ReadLine();
        }
    }

0
class Foo {

  protected static $test;

  public static initialize() {
    self::$test = 'initialized';
  }

}

Foo::initialize();

Koniec końców musisz ręcznie wykonać metodę inicjującą, jeśli o to chodzi.

0

To co chcesz, to w PHP robi się np. tak:

class Foo
{
    private $field;
    
    public static function factory($initial = 'Some value')
    {
        $class = new Foo($initial);
        return $class;
    }
    
    public function __construct($initial = 'Some value')
    {
        $this->field = $initial;
    }
    
    public function getField()
    {
        return $this->field;
    }
}

$foo = new Foo('Some Value 1');
echo $foo->getField();
echo "\n";
echo Foo::factory('Some Value 2')
    ->getField();
echo "\n";
echo (new Foo('Some Value 3'))
    ->getField();        

Czyli masz konstruktor, przyjmujący jakąś wartość domyślną, i statyczna metoda factory, która tworzy tą klasę. Niżej trzy sposoby użycia tej klasy. Ten ostatni przypadek bez użycia metody Factory ale muszą być te nawiasy tzn takie coś:

echo new Foo('Some Value 3')
    ->getField(); 

Nie zadziała i wywali błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1