PHP构造函数未调用

时间:2016-05-04 12:00:43

标签: php class constructor

我有问题,我可以调用构造函数而不创建' 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 个答案:

答案 0 :(得分:0)

是的,可以将say()函数设为静态,如下所示:

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

将类方法声明为static使它们可以访问,而无需实例化类。

这个例子看起来像是后期静态绑定。因此,请尝试将return self::$hello;更改为return static::$hello;

答案 1 :(得分:0)

看看这个。这对你有好处吗?

<?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只是一个名字。你可以重命名它。

calling class method (with constructors) without object instantiation in php

答案 2 :(得分:0)

您已经问过:&#34;我可以在没有创建&#39;新类()&#39;的情况下调用构造函数。 ?&#34;
答案:否。

  

...具有构造函数方法的类在每个方法上调用此方法   新创建的对象

您已请求&#34;但我想使用b::say();&#34;
b::say(); - 调用静态方法。
您不能将非静态父方法覆盖为静态方法。但您可以重构基类class a以使say()方法静态。

答案 3 :(得分:0)

<?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)函数。

希望这有点帮助:)