gpt4 book ai didi

php - 类扩展自身?

转载 作者:可可西里 更新时间:2023-11-01 12:35:08 25 4
gpt4 key购买 nike

我遇到过一个以前的员工写的PHP类,是这样定义的:

namespace SomeNamespace;

class SomeClass extends ::SomeClass
{
private function __construct() {}

public static function someFunction()
{
//Do something
}
}

有人可以解释一下这里发生了什么吗?这个类是在扩展自己吗?我知道单例会使用私有(private)构造函数,但不确定这里发生了什么。

实际的类与缓存有关。不确定这是否有帮助。

最佳答案

我不认为你可以使用 :: 做这种事情;但如果您使用命名空间分隔符,它应该可以工作:\

我刚刚使用 PHP PHP 5.3.5 进行了测试——使用 :: 确实给我带来了错误。
另一方面,使用\效果很好(参见下面的示例)


例如,在全局命名空间 (在任何特定命名空间之外) 中,您可以定义一个类 SomeClass :

namespace {

class SomeClass
{
public function method() {
var_dump("child: " . __METHOD__);
}
}


$obj = new SomeNamespace\SomeClass();
$obj->method();

}


并且,在我的示例中称为 SomeNamespace 的特定命名空间中,您可以定义一个类 SomeClass ,它将从全局命名空间扩展该类 - 可以作为 访问\一些类 :

namespace SomeNamespace {

class SomeClass extends \SomeClass
{
public function method() {
var_dump("parent: " . __METHOD__);
}
}

}


旁注:在这里,我使用了 bracketed syntax ,因为我将两部分代码放在同一个文件中(请参阅该手册页上的示例 3)——但它应该与多个文件一样工作。



请注意,在 PHP 5.3 的第一个 alpha 版本中,命名空间分隔符不是 \,而是 ::

因此,如果您使用的是 PHP 5.3 alpha 1 或 2 (也许是 3,不确定 \ 是否在 alpha 3 之前或之后被选择),使用 :: 可能有效。

(当然,您不应该使用 alpha -- 特别是考虑到 PHP 5.3 的稳定版本已经发布两年了)

关于php - 类扩展自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com