2014-02-28 35 views
0

如何从外部访问类变量而不在PHP中创建新实例?事情是这样的:从外部访问类变量

class foo 
{ 
    public $bar; 
} 

echo foo::$bar; 

是否有可能还是我必须创建方法,将打印或返回此值,并使用它或创建新实例($a = new foo; echo $a->$bar)?

编辑:我不想创建常量,但经典的变量,将稍后改变。

回答

0

成静态变量与淘汰类对象进行访问。

如果你想用方法来改变静态变量的值,那么你需要使用静态方法

你可以尝试这样的:

class foo 
{ 
    public static $bar ="google"; 
    public static function changeVal($val){ 
    self::$bar=$val; 
    } 
} 
foo::changeVal("changed :)"); 
echo foo::$bar; 

输出:changed :)

演示:https://eval.in/107138

你也可以这样改变它没有静态方法:

foo::$bar = "changed"; 

演示:https://eval.in/107139

这样的:

class foo 
{ 
    public static $bar ="google"; 
} 
echo foo::$bar; 

输出:google

演示:https://eval.in/107126

+0

这我想用,但没有输出可见。但是如果我在方法里面改变它并且在改变方法后使用echo,我会得到正确的结果而不是从外部得到。 – JARDA001

+0

@ JARDA001:你有没有在我的演示链接中看到?我也更新了我的答案以更改值 –

+0

是的,我看到但我看到只有默认值,没有更改。编辑:片刻,我试试这个。 – JARDA001

0

IF是有意义的使用静态变量:

class foo{ 
    public static $bar = 'example'; 
} 

哪位能像这样来访问:

echo foo::$bar; 
0

您可以访问类变量只在变量标记为静态时才创建实例:

class foo 
{ 
    public static $bar; 
} 
+0

我尝试这个,但输出不正确。如果我将类内的变量设置为默认值(FALSE),并将其更改为方法并在同一位置打印值,则结果是正确的,但是如果我想要外部打印值,则结果不正确。 – JARDA001

0

这是你如何使用类变量:

// with instantiation 
class foo { 
    // initialize on declare 
    public $bar = 1; 
    // or initialize in __construct() 
    public function __construct(){ 
     $this->bar = 1; 
    } 
} 
$foo = new foo(); 
var_dump($foo->bar); 

// static way 
class static_foo { 
    public static $bar = 1; 
} 
var_dump(static_foo::$bar); 

这就是你如何从一个随机的类名字符串变量,实例化一个类。

$foo = new foo(); 
$random_class_name = $foo->bar; 
try { 
    // following line throws if class is not found 
    $rc = new \ReflectionClass($random_class_name); 
    $obj = $rc->newInstance(); 
    // can be used with dynamic arguments 
    // $obj = $rc->newInstance(...); 
    // $obj = $rc->newInstanceArgs(array(...)); 
} catch(\Exception $Ex){ 
    $obj = null; 
} 
if($obj){ 
    // you have a dynamic object 
} 

什么是您的实际问题?