2010-05-29 187 views
1
class Person { 
    public static function ShowQualification() { 
    } 
} 

class School { 
    public static $Headmaster = new Person(); // NetBeans complains about this line 
} 

为什么不能这样做?在PHP中初始化静态成员

我希望能够利用这个像

School::Headmaster::ShowQualification(); 

..无任何实例类。我该怎么做?

更新:好吧,我明白了为什么。有人可以解释如何部分?谢谢:)

+0

静态属性也被称为类的属性相反的对象属性。你为什么只想要*所有*学校的*校长? – Gumbo 2010-05-29 06:49:47

+0

请不要在语义上看它。我无法发布我的专有代码。我只是想到了一个愚蠢的例子。不妨将它们命名为abc和xyz:D – Senthil 2010-05-29 06:54:10

回答

3

the docs

“像任何其他PHP静态变量, 静态属性可以仅 使用文字或 恒定初始化;表达式不 不允许”。

new Person()不是一个文字或常量,所以这是行不通的。

您可以使用一个变通:

class School { 
    public static $Headmaster; 
} 

School::$Headmaster = new Person(); 
+0

您的答案被引用,我理解“为什么”部分。但*如何*我应该修改我的代码,以便我可以使用所描述的类? – Senthil 2010-05-29 06:45:43

+0

+1谢谢:)只是出于好奇,人们如何生活呢? PHP是一种广泛用于Web开发的语言,我很惊讶我们必须这样做... – Senthil 2010-05-29 06:49:31

+0

@Senthil:因为它不是世界的尽头,而且它的功能很小? – 2011-03-16 11:09:55

-2

new Person()是操作,而不是一个值。

像任何其他PHP静态变量, 静态属性可以仅 使用文字或 恒定初始化;表达式是不允许的。 因此,尽管您可以将静态 属性初始化为整数或数组(对于 实例),但您可能不会将其初始化为 为其他变量,返回值为函数 或对象。

http://php.net/static

您可以初始化学校类的一个对象:

class School { 
    public static $Headmaster; // NetBeans complains about this line 
    public function __construct() { 
    $this->Headmaster = new Person(); 
    } 
} 

$school = new School(); 
$school->Headmaster->ShowQualification(); 
+0

嗨,我不想实例化。我只想使用它们,如Class1 :: Member1 :: SubMember。 – Senthil 2010-05-29 06:57:19

+2

-1。你不能使用$ this作为静态变量。 – 2010-05-29 08:34:44

+0

您不能使用$ this作为静态变量,并且没有任何意义实例化对象以访问静态变量。 – 2013-03-12 20:52:48