我有问题,我可以调用构造函数而不创建' 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();
可以帮帮我吗?
谢谢!
答案 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)
函数。
希望这有点帮助:)