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
是私有的,并且您是从静态方法调用它,但它也必须是私有静态的