如果我有:
<?php
class SomeClass extends SomeOtherClass{
private $access_code = 'TX9999';
private static function SomeMethod(){
}
}
?>
并且
<?
self::SomeMethod();
?>
如何在$access_code
::SomeMethod()
更多信息
我实际面对的是更复杂的。
我有一个类,其方法必须保持静态。 我知道如何使用self调用其他方法。
然而,在整个班级中,我有一些通常作为常数和变量有意义的东西。
我意识到我没有以正常方式获得一个实例,我正在寻找在类的一些静态方法之间共享变量,一些是volatile,一些是固定的
答案 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,也只能在您的类中调用它。不在外面。将其更改为protected
或public
。
此外,
除非您将其声明为静态,否则无法从静态方法中调用$access_code
。静态方法无法洞察$this
。他们可以访问常量和self
,但他们访问的内容必须是静态的。
答案 4 :(得分:0)
我认为您需要使用self
关键字,因此您可以在函数中访问它,如下所示:
private static function SomeMethod(){
return self::$access_code;
}
编辑:$ access_code需要声明为静态才能生效。