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

时间:2012-07-02 14:10:57

标签: php

如果我有:

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

  private static function SomeMethod(){

  }
}

?>

并且

<?
self::SomeMethod();
?>

如何在$access_code

中正确访问::SomeMethod()

更多信息

我实际面对的是更复杂的。

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

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

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

5 个答案:

答案 0 :(得分: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() { ... }

答案 1 :(得分:1)

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

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

  private static function SomeMethod(){

  }
}

答案 2 :(得分: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兼容:)

答案 3 :(得分:0)

首先,

<?
SomeClass::SomeMethod();
?>

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

此外,

除非您将其声明为静态,否则无法从静态方法中调用$access_code。静态方法无法洞察$this。他们可以访问常量和self,但他们访问的内容必须是静态的。

答案 4 :(得分:0)

我认为您需要使用self关键字,因此您可以在函数中访问它,如下所示:

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

编辑:$ access_code需要声明为静态才能生效。