2012-07-02 118 views
2

如果我有:静态调用方法时如何访问私有类变量?

<?php 
class SomeClass extends SomeOtherClass{ 
    private $access_code = 'TX9999'; 

    private static function SomeMethod(){ 

    } 
} 

?> 

,做

<? 
self::SomeMethod(); 
?> 

我怎么正确::SomeMethod()

更多信息访问$access_code

什么我其实面临的是更为复杂的。

我有一个方法,并且必须保持静态。 我知道如何使用self调用其他方法。

然而,在整个班级中,我有一些通常作为常量和变量有意义的东西。

我意识到,我没有得到正常的方式一个实例,并正在寻找远一些的类的静态方法之间共享变量,有些是挥发性的,一些固定的

回答

2

这会做什么你要;它在能够访问私有实例变量$access_code之前首先创建它自己的一个实例。

$o = new self; 
echo $o->access_code; 

如果你想有一个类变量而不是实例变量,你必须声明$access_code这样的:

private static $access_code = 'TX9999'; 

然后,从这样的静态方法调用它:

private static function SomeMethod() 
{ 
    echo self::$access_code; 
} 

顺便说一句,你不能从课外打电话::SomeMethod()。为了做到这一点,你需要使它public

public static function SomeMethod() { ... } 
+0

问题来自课堂中的一个方法......不在课堂之外。 – Brian

+0

@布赖恩是的,但该方法是静态的,所以它本身不能访问实例变量。 –

+0

有趣的是,我会回复你并接受它,如果它出来 – allen213

1

因为它是一个静态方法,你的变量是不是,你需要一个实例。我建议,如果该值不会改变,你必须这样:

<?php 
class SomeClass extends SomeOtherClass{ 
    private static $access_code = 'TX9999'; 

    private static function SomeMethod(){ 

    } 
} 
0

通常(对于PHP肯定不是100%),你需要有你的类的实例来访问它的变量。

第二种可能性是让变量也是静态的。

实例:

1.

<?php 
class SomeClass extends SomeOtherClass{ 
    public $access_code = 'TX9999'; 

    public static function SomeMethod() { 
    SomeClass sc = new SomeClass(); 
    echo sc.access_code; 
    } 
} 

2。

<?php 
class SomeClass extends SomeOtherClass{ 
    public static $access_code = 'TX9999'; 

    public static function SomeMethod() { 
    // no need for SomeClass, because your in the same class, but if you want to use it directly from outside the class 
    echo SomeClass.access_code; 
    } 
} 
?> 

BTW:我改变私人公共

PS:不知道这是php兼容:)

0

首先,

<? 
SomeClass::SomeMethod(); 
?> 

将失败。你宣布它是私人的。这意味着,即使声明为静态,它也只能在你的类中调用。不在外面。将其更改为protectedpublic

此外,

,除非你把它声明为静态的不能从静态方法中调用$access_code。静态方法没有洞察到$this。他们可以访问常量和self,但他们访问的内容必须是静态的。

+0

它将被从类内部调用,我简化了很多,以获得点 – allen213

+0

但是,调用'SomeClass :: SomeMethod();'被认为是外部。虽然'$ access_code'是私人的,并且你是从一个静态方法调用它,它也必须是'私人静态' –

+0

抱歉应该是自己::,编辑 – allen213

0

我相信你需要使用self关键字,所以你会访问它在你的函数是这样的:

private static function SomeMethod(){ 
    return self::$access_code; 
} 

编辑:$ access_code需要被声明为静态的,以及这个工作。

+0

这将失败与'PHP致命错误:访问未声明的静态property:SomeClass :: $ access_code' –

+0

糟糕的是,没有注意到$ access_code不是静态的。你是对的。 –