PHP конструктор не вызывается

I have problem, can I call constructor without create ‘ new class ()’? Или у вас может быть другой способ для этого :

<?php

class a
{
    public static $hello;

    public function say()
    {
        return self::$hello;
    }

}

class b extends a
{
    public function __construct()
    {
        self::$hello = 'hello world';
    }
}


echo b::say();

?>

У меня есть попробовать с :

$b = new b();
echo $b->say();

И это работа. Но я хочу использовать b::say();

Можете мне помочь?

Спасибо!!

4 ответа

  1. Да, можно просто сделать функцию say() статичной, как это :

    public static function say()
    {
        return self::$hello;
    }
    

    Объявление методов класса статическими делает их доступными без создания экземпляра класса.

    Этот пример выглядит как поздняя статическая привязка. Так что попробуйте изменить это return self::$hello;в return static::$hello;

  2. Проверьте это. Это хорошо для вас?

    <?php
    
    class a {
        public static $hello;
    
        public static function say() {
            return self::$hello;
        }
    }
    
    class b extends a {
        public function __construct() {
            self::$hello = 'hello world';
        }
    
        public static function factory() {
            return new b();
        }
    }
    
    echo b::factory()->say();
    
    ?>
    

    На самом деле я не мог найти способ сделать это без вызова конструктора. Вот как выглядит обходной путь. factoryэто просто имя. вы можете переименовать его.

    вызов метода класса (с конструкторами) без создания экземпляра объекта в php

  3. Вы спросили: «Можно ли вызвать конструктор без создания ‘new class()’ ?
    Ответ: Нет.

    … Классы, которые имеют метод конструктора, вызывают этот метод на каждом
    вновь созданный объект

    Вы запросили «но я хочу использоватьb::say();»
    b::say();— это вызов статического метода.
    Нельзя переопределить нестатический родительский метод на статический. Но вы можете реструктурировать базовый классclass a, чтобы сделать say()метод статичным.

  4. <?php
    
    class a
    {
      public static $hello;
    
    public static function say()
    {
      return self::$hello;
    }
    
    }
    
    class b extends a
    {
    public function __construct()
      {
          self::$hello = 'hello world';
      }
    }
    

    То, что вы упустили, было необходимо, чтобы добавить содержимое в свой new classметод. — Просто назовите это так:

    $b = new b('Some words');
    echo $b->say();
    

    При вызове new class и использовании конструктора-вы захотите добавить содержимое в параматеры для нового класса, который вы создаете.

    Он действует так, как будто вы вызываете __constructфункцию. — Вызов new class($a)вызовет __construct($a)функцию после создания объекта.

    Надеюсь что это помогло немного 🙂