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

Php 静态调用方法时,如何访问私有类变量?,php,Php,如果我有: <?php class SomeClass extends SomeOtherClass{ private $access_code = 'TX9999'; private static function SomeMethod(){ } } ?> 做 <? self::SomeMethod(); ?> 如何在中正确访问$access\u code::SomeMethod() 更多信息 我真正面对的是更复杂的事情 我有一个类,它的方

如果我有:

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

  private static function SomeMethod(){

  }
}

?>

<?
self::SomeMethod();
?>

如何在
中正确访问
$access\u code
::SomeMethod()

更多信息

我真正面对的是更复杂的事情

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

然而,在整个课堂上,我有一些通常意义上的常量和变量


我意识到我没有一个正常的实例,我正在寻找在类的一些静态方法之间共享变量的方法,一些是易变的,一些是固定的,这将满足您的需要;它首先创建自身的实例,然后才能访问私有实例变量
$access\u code

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

如果希望使用类变量而不是实例变量,则必须如下声明
$access\u code

private static $access_code = 'TX9999';
private static function SomeMethod()
{
    echo self::$access_code;
}
然后从静态方法调用它,如下所示:

private static $access_code = 'TX9999';
private static function SomeMethod()
{
    echo self::$access_code;
}
顺便说一句,您不能从类外调用
::SomeMethod()
。为此,您需要将其公开:

public static function SomeMethod() { ... }

因为它是一个静态方法,而您的变量不是,所以您需要一个实例。我建议,如果该值不变,您可以:

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

  private static function SomeMethod(){

  }
}
通常(对于PHP不是100%确定)您需要类的实例来访问其变量

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

示例:

一,


顺便说一句:我把私人的变成了公共的

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

首先

<?
SomeClass::SomeMethod();
?>

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

而且


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

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

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

EDIT:$access\u代码也需要声明为静态代码才能工作

这个问题来自课堂上的一个方法。。。不在类外。@Brian是的,但该方法是静态的,因此它本身无法访问实例变量。这将失败,并出现
PHP致命错误:访问未声明的静态属性:SomeClass::$access\u code
它将从类内调用,我简化了很多以获得跨类点,调用
SomeClass::SomeMethod()被认为是外部的。尽管
$access\u code
是私有的,并且您是从静态方法调用它,但它也必须是
私有静态的