2

如果我有:

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

  private static function SomeMethod(){

  }
}

?>

<?
self::SomeMethod();
?>

我如何正确$access_code访问::SomeMethod()

更多信息

我实际面临的更复杂。

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

然而,在课堂上,我有一些通常作为常量和变量有意义的东西。

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

4

5 回答 5

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() { ... }
于 2012-07-02T14:14:43.703 回答
1

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

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

  private static function SomeMethod(){

  }
}
于 2012-07-02T14:16:36.360 回答
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;
  }
}
?>

顺便说一句:我将私有更改为公共

ps:不确定这是否与php兼容:)

于 2012-07-02T14:16:43.130 回答
0

首先,

<?
SomeClass::SomeMethod();
?>

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

还,

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

于 2012-07-02T14:16:53.580 回答
0

我相信您需要使用self关键字,因此您可以像这样在函数中访问它:

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

编辑: $access_code 也需要被声明为静态的才能工作。

于 2012-07-02T14:17:36.790 回答